* [PATCH 15/19] raid6_kunit: dynamically allocate data buffers using vmalloc
From: Christoph Hellwig @ 2026-05-12 5:20 UTC (permalink / raw)
To: Andrew Morton
Cc: Catalin Marinas, Will Deacon, Ard Biesheuvel, Huacai Chen,
WANG Xuerui, Madhavan Srinivasan, Michael Ellerman,
Nicholas Piggin, Christophe Leroy (CS GROUP), Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Heiko Carstens,
Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
Sven Schnelle, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Herbert Xu, Dan Williams,
Chris Mason, David Sterba, Arnd Bergmann, Song Liu, Yu Kuai,
Li Nan, linux-kernel, linux-arm-kernel, loongarch, linuxppc-dev,
linux-riscv, linux-s390, linux-crypto, linux-btrfs, linux-arch,
linux-raid
In-Reply-To: <20260512052230.2947683-1-hch@lst.de>
Use vmalloc for the data buffers instead of using static .data allocations.
This provides for better out of bounds checking and avoids wasting kernel
memory after the test has run. vmalloc is used instead of kmalloc to
provide for better out of bounds access checking as in other kunit tests.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
lib/raid/raid6/tests/raid6_kunit.c | 77 ++++++++++++++++++++++++------
1 file changed, 62 insertions(+), 15 deletions(-)
diff --git a/lib/raid/raid6/tests/raid6_kunit.c b/lib/raid/raid6/tests/raid6_kunit.c
index f55b081b6b13..a4b65ccc9d20 100644
--- a/lib/raid/raid6/tests/raid6_kunit.c
+++ b/lib/raid/raid6/tests/raid6_kunit.c
@@ -7,19 +7,20 @@
#include <kunit/test.h>
#include <linux/prandom.h>
+#include <linux/vmalloc.h>
#include "../algos.h"
MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
#define RAID6_KUNIT_SEED 42
+#define RAID6_KUNIT_MAX_FAILURES 2
#define NDISKS 16 /* Including P and Q */
static struct rnd_state rng;
static void *dataptrs[NDISKS];
-static char data[NDISKS][PAGE_SIZE] __attribute__((aligned(PAGE_SIZE)));
-static char recovi[PAGE_SIZE] __attribute__((aligned(PAGE_SIZE)));
-static char recovj[PAGE_SIZE] __attribute__((aligned(PAGE_SIZE)));
+static void *test_buffers[NDISKS];
+static void *test_recov_buffers[RAID6_KUNIT_MAX_FAILURES];
struct test_args {
unsigned int recov_idx;
@@ -35,8 +36,8 @@ static void makedata(int start, int stop)
int i;
for (i = start; i <= stop; i++) {
- prandom_bytes_state(&rng, data[i], PAGE_SIZE);
- dataptrs[i] = data[i];
+ prandom_bytes_state(&rng, test_buffers[i], PAGE_SIZE);
+ dataptrs[i] = test_buffers[i];
}
}
@@ -55,12 +56,13 @@ static char member_type(int d)
static void test_recover(struct kunit *test, int faila, int failb)
{
const struct test_args *ta = test->param_value;
+ int i;
- memset(recovi, 0xf0, PAGE_SIZE);
- memset(recovj, 0xba, PAGE_SIZE);
+ for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++)
+ memset(test_recov_buffers[i], 0xf0, PAGE_SIZE);
- dataptrs[faila] = recovi;
- dataptrs[failb] = recovj;
+ dataptrs[faila] = test_recov_buffers[0];
+ dataptrs[failb] = test_recov_buffers[1];
if (failb == NDISKS - 1) {
/*
@@ -80,18 +82,20 @@ static void test_recover(struct kunit *test, int faila, int failb)
ta->recov->data2(NDISKS, PAGE_SIZE, faila, failb, dataptrs);
}
- KUNIT_EXPECT_MEMEQ_MSG(test, data[faila], recovi, PAGE_SIZE,
+ KUNIT_EXPECT_MEMEQ_MSG(test, test_buffers[faila], test_recov_buffers[0],
+ PAGE_SIZE,
"faila miscompared: %3d[%c] (failb=%3d[%c])\n",
faila, member_type(faila),
failb, member_type(failb));
- KUNIT_EXPECT_MEMEQ_MSG(test, data[failb], recovj, PAGE_SIZE,
+ KUNIT_EXPECT_MEMEQ_MSG(test, test_buffers[failb], test_recov_buffers[1],
+ PAGE_SIZE,
"failb miscompared: %3d[%c] (faila=%3d[%c])\n",
failb, member_type(failb),
faila, member_type(faila));
skip:
- dataptrs[faila] = data[faila];
- dataptrs[failb] = data[failb];
+ dataptrs[faila] = test_buffers[faila];
+ dataptrs[failb] = test_buffers[failb];
}
static void raid6_test(struct kunit *test)
@@ -100,8 +104,8 @@ static void raid6_test(struct kunit *test)
int i, j, p1, p2;
/* Nuke syndromes */
- memset(data[NDISKS - 2], 0xee, PAGE_SIZE);
- memset(data[NDISKS - 1], 0xee, PAGE_SIZE);
+ memset(test_buffers[NDISKS - 2], 0xee, PAGE_SIZE);
+ memset(test_buffers[NDISKS - 1], 0xee, PAGE_SIZE);
/* Generate assumed good syndrome */
ta->gen->gen_syndrome(NDISKS, PAGE_SIZE, (void **)&dataptrs);
@@ -161,15 +165,58 @@ static struct kunit_case raid6_test_cases[] = {
static int raid6_suite_init(struct kunit_suite *suite)
{
+ int i;
+
prandom_seed_state(&rng, RAID6_KUNIT_SEED);
+
+ /*
+ * Allocate the test buffer using vmalloc() with a page-aligned length
+ * so that it is immediately followed by a guard page. This allows
+ * buffer overreads to be detected, even in assembly code.
+ */
+ for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++) {
+ test_recov_buffers[i] = vmalloc(PAGE_SIZE);
+ if (!test_recov_buffers[i])
+ goto out_free_recov_buffers;
+ }
+ for (i = 0; i < NDISKS; i++) {
+ test_buffers[i] = vmalloc(PAGE_SIZE);
+ if (!test_buffers[i])
+ goto out_free_buffers;
+ }
+
makedata(0, NDISKS - 1);
+
return 0;
+
+out_free_buffers:
+ for (i = 0; i < NDISKS; i++)
+ vfree(test_buffers[i]);
+ memset(test_buffers, 0, sizeof(test_buffers));
+out_free_recov_buffers:
+ for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++)
+ vfree(test_recov_buffers[i]);
+ memset(test_recov_buffers, 0, sizeof(test_recov_buffers));
+ return -ENOMEM;
+}
+
+static void raid6_suite_exit(struct kunit_suite *suite)
+{
+ int i;
+
+ for (i = 0; i < NDISKS; i++)
+ vfree(test_buffers[i]);
+ memset(test_buffers, 0, sizeof(test_buffers));
+ for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++)
+ vfree(test_recov_buffers[i]);
+ memset(test_recov_buffers, 0, sizeof(test_recov_buffers));
}
static struct kunit_suite raid6_test_suite = {
.name = "raid6",
.test_cases = raid6_test_cases,
.suite_init = raid6_suite_init,
+ .suite_exit = raid6_suite_exit,
};
kunit_test_suite(raid6_test_suite);
--
2.53.0
^ permalink raw reply related
* [PATCH 16/19] raid6_kunit: cleanup dataptr handling
From: Christoph Hellwig @ 2026-05-12 5:20 UTC (permalink / raw)
To: Andrew Morton
Cc: Catalin Marinas, Will Deacon, Ard Biesheuvel, Huacai Chen,
WANG Xuerui, Madhavan Srinivasan, Michael Ellerman,
Nicholas Piggin, Christophe Leroy (CS GROUP), Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Heiko Carstens,
Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
Sven Schnelle, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Herbert Xu, Dan Williams,
Chris Mason, David Sterba, Arnd Bergmann, Song Liu, Yu Kuai,
Li Nan, linux-kernel, linux-arm-kernel, loongarch, linuxppc-dev,
linux-riscv, linux-s390, linux-crypto, linux-btrfs, linux-arch,
linux-raid
In-Reply-To: <20260512052230.2947683-1-hch@lst.de>
Move the global dataptr array into test_recover() as all sites that fill
data or parity can use test_buffers directly, and this localized the
override for the failed slots to the recovery testing routine.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
lib/raid/raid6/tests/raid6_kunit.c | 19 +++++++------------
1 file changed, 7 insertions(+), 12 deletions(-)
diff --git a/lib/raid/raid6/tests/raid6_kunit.c b/lib/raid/raid6/tests/raid6_kunit.c
index a4b65ccc9d20..28b4467977c5 100644
--- a/lib/raid/raid6/tests/raid6_kunit.c
+++ b/lib/raid/raid6/tests/raid6_kunit.c
@@ -18,7 +18,6 @@ MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
#define NDISKS 16 /* Including P and Q */
static struct rnd_state rng;
-static void *dataptrs[NDISKS];
static void *test_buffers[NDISKS];
static void *test_recov_buffers[RAID6_KUNIT_MAX_FAILURES];
@@ -35,10 +34,8 @@ static void makedata(int start, int stop)
{
int i;
- for (i = start; i <= stop; i++) {
+ for (i = start; i <= stop; i++)
prandom_bytes_state(&rng, test_buffers[i], PAGE_SIZE);
- dataptrs[i] = test_buffers[i];
- }
}
static char member_type(int d)
@@ -56,11 +53,13 @@ static char member_type(int d)
static void test_recover(struct kunit *test, int faila, int failb)
{
const struct test_args *ta = test->param_value;
+ void *dataptrs[NDISKS];
int i;
for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++)
memset(test_recov_buffers[i], 0xf0, PAGE_SIZE);
+ memcpy(dataptrs, test_buffers, sizeof(dataptrs));
dataptrs[faila] = test_recov_buffers[0];
dataptrs[failb] = test_recov_buffers[1];
@@ -70,7 +69,7 @@ static void test_recover(struct kunit *test, int faila, int failb)
* is equivalent to a RAID-5 failure (XOR, then recompute Q).
*/
if (faila != NDISKS - 2)
- goto skip;
+ return;
/* P+Q failure. Just rebuild the syndrome. */
ta->gen->gen_syndrome(NDISKS, PAGE_SIZE, dataptrs);
@@ -92,10 +91,6 @@ static void test_recover(struct kunit *test, int faila, int failb)
"failb miscompared: %3d[%c] (faila=%3d[%c])\n",
failb, member_type(failb),
faila, member_type(faila));
-
-skip:
- dataptrs[faila] = test_buffers[faila];
- dataptrs[failb] = test_buffers[failb];
}
static void raid6_test(struct kunit *test)
@@ -108,7 +103,7 @@ static void raid6_test(struct kunit *test)
memset(test_buffers[NDISKS - 1], 0xee, PAGE_SIZE);
/* Generate assumed good syndrome */
- ta->gen->gen_syndrome(NDISKS, PAGE_SIZE, (void **)&dataptrs);
+ ta->gen->gen_syndrome(NDISKS, PAGE_SIZE, test_buffers);
for (i = 0; i < NDISKS - 1; i++)
for (j = i + 1; j < NDISKS; j++)
@@ -121,10 +116,10 @@ static void raid6_test(struct kunit *test)
for (p2 = p1; p2 < NDISKS - 2; p2++) {
/* Simulate rmw run */
ta->gen->xor_syndrome(NDISKS, p1, p2, PAGE_SIZE,
- (void **)&dataptrs);
+ test_buffers);
makedata(p1, p2);
ta->gen->xor_syndrome(NDISKS, p1, p2, PAGE_SIZE,
- (void **)&dataptrs);
+ test_buffers);
for (i = 0; i < NDISKS - 1; i++)
for (j = i + 1; j < NDISKS; j++)
--
2.53.0
^ permalink raw reply related
* [PATCH 17/19] raid6_kunit: randomize parameters and increase limits
From: Christoph Hellwig @ 2026-05-12 5:20 UTC (permalink / raw)
To: Andrew Morton
Cc: Catalin Marinas, Will Deacon, Ard Biesheuvel, Huacai Chen,
WANG Xuerui, Madhavan Srinivasan, Michael Ellerman,
Nicholas Piggin, Christophe Leroy (CS GROUP), Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Heiko Carstens,
Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
Sven Schnelle, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Herbert Xu, Dan Williams,
Chris Mason, David Sterba, Arnd Bergmann, Song Liu, Yu Kuai,
Li Nan, linux-kernel, linux-arm-kernel, loongarch, linuxppc-dev,
linux-riscv, linux-s390, linux-crypto, linux-btrfs, linux-arch,
linux-raid
In-Reply-To: <20260512052230.2947683-1-hch@lst.de>
The current test has double-quadratic behavior in the selection for
the updated ("XORed") disks, and in the selection of updated pointers,
which makes scaling it to more tests difficult. At the same time it
only ever tests with the maximum number of disks, which leaves a
coverage hole for smaller ones.
Fix this by randomizing the total number, failed disks and regions
to update, and increasing the upper number of tests disks.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
lib/raid/raid6/tests/raid6_kunit.c | 184 ++++++++++++++++++++---------
1 file changed, 126 insertions(+), 58 deletions(-)
diff --git a/lib/raid/raid6/tests/raid6_kunit.c b/lib/raid/raid6/tests/raid6_kunit.c
index 28b4467977c5..775a0051f9a4 100644
--- a/lib/raid/raid6/tests/raid6_kunit.c
+++ b/lib/raid/raid6/tests/raid6_kunit.c
@@ -13,13 +13,15 @@
MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
#define RAID6_KUNIT_SEED 42
+#define RAID6_KUNIT_NUM_TEST_ITERS 10
+#define RAID6_KUNIT_MAX_BUFFERS 64 /* Including P and Q */
#define RAID6_KUNIT_MAX_FAILURES 2
-
-#define NDISKS 16 /* Including P and Q */
+#define RAID6_KUNIT_MAX_BYTES PAGE_SIZE
static struct rnd_state rng;
-static void *test_buffers[NDISKS];
+static void *test_buffers[RAID6_KUNIT_MAX_BUFFERS];
static void *test_recov_buffers[RAID6_KUNIT_MAX_FAILURES];
+static size_t test_buflen;
struct test_args {
unsigned int recov_idx;
@@ -30,102 +32,167 @@ struct test_args {
static struct test_args args;
+static u32 rand32(void)
+{
+ return prandom_u32_state(&rng);
+}
+
+/* Generate a random length that is a multiple of 512. */
+static unsigned int random_length(unsigned int max_length)
+{
+ return round_up((rand32() % max_length) + 1, 512);
+}
+
static void makedata(int start, int stop)
{
int i;
for (i = start; i <= stop; i++)
- prandom_bytes_state(&rng, test_buffers[i], PAGE_SIZE);
+ prandom_bytes_state(&rng, test_buffers[i], test_buflen);
}
-static char member_type(int d)
+static char member_type(unsigned int nr_buffers, int d)
{
- switch (d) {
- case NDISKS-2:
+ if (d == nr_buffers - 2)
return 'P';
- case NDISKS-1:
+ if (d == nr_buffers - 1)
return 'Q';
- default:
- return 'D';
- }
+ return 'D';
}
-static void test_recover(struct kunit *test, int faila, int failb)
+static void test_recover_one(struct kunit *test, unsigned int nr_buffers,
+ unsigned int len, int faila, int failb)
{
const struct test_args *ta = test->param_value;
- void *dataptrs[NDISKS];
+ void *dataptrs[RAID6_KUNIT_MAX_BUFFERS];
int i;
+ if (faila > failb)
+ swap(faila, failb);
+
for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++)
- memset(test_recov_buffers[i], 0xf0, PAGE_SIZE);
+ memset(test_recov_buffers[i], 0xf0, test_buflen);
memcpy(dataptrs, test_buffers, sizeof(dataptrs));
dataptrs[faila] = test_recov_buffers[0];
dataptrs[failb] = test_recov_buffers[1];
- if (failb == NDISKS - 1) {
+ if (failb == nr_buffers - 1) {
/*
* We don't implement the data+Q failure scenario, since it
* is equivalent to a RAID-5 failure (XOR, then recompute Q).
*/
- if (faila != NDISKS - 2)
+ if (WARN_ON_ONCE(faila != nr_buffers - 2))
return;
/* P+Q failure. Just rebuild the syndrome. */
- ta->gen->gen_syndrome(NDISKS, PAGE_SIZE, dataptrs);
- } else if (failb == NDISKS - 2) {
+ ta->gen->gen_syndrome(nr_buffers, len, dataptrs);
+ } else if (failb == nr_buffers - 2) {
/* data+P failure. */
- ta->recov->datap(NDISKS, PAGE_SIZE, faila, dataptrs);
+ ta->recov->datap(nr_buffers, len, faila, dataptrs);
} else {
/* data+data failure. */
- ta->recov->data2(NDISKS, PAGE_SIZE, faila, failb, dataptrs);
+ ta->recov->data2(nr_buffers, len, faila, failb, dataptrs);
}
KUNIT_EXPECT_MEMEQ_MSG(test, test_buffers[faila], test_recov_buffers[0],
- PAGE_SIZE,
- "faila miscompared: %3d[%c] (failb=%3d[%c])\n",
- faila, member_type(faila),
- failb, member_type(failb));
+ len,
+ "faila miscompared: %3d[%c] buffers %u len %u (failb=%3d[%c])\n",
+ faila, member_type(nr_buffers, faila),
+ nr_buffers, len,
+ failb, member_type(nr_buffers, failb));
KUNIT_EXPECT_MEMEQ_MSG(test, test_buffers[failb], test_recov_buffers[1],
- PAGE_SIZE,
- "failb miscompared: %3d[%c] (faila=%3d[%c])\n",
- failb, member_type(failb),
- faila, member_type(faila));
+ len,
+ "failb miscompared: %3d[%c] buffers %u len %u (faila=%3d[%c])\n",
+ failb, member_type(nr_buffers, failb),
+ nr_buffers, len,
+ faila, member_type(nr_buffers, faila));
}
-static void raid6_test(struct kunit *test)
+static void test_recover(struct kunit *test, unsigned int nr_buffers,
+ unsigned int len)
+{
+ unsigned int nr_data = nr_buffers - 2;
+ int iterations, i;
+
+ /* Test P+Q recovery */
+ test_recover_one(test, nr_buffers, len, nr_data, nr_buffers - 1);
+
+ /* Test data+P recovery */
+ for (i = 0; i < nr_buffers - 2; i++)
+ test_recover_one(test, nr_buffers, len, i, nr_data);
+
+ /* Double data failure is impossible with a single data disk */
+ if (nr_data == 1)
+ return;
+
+ /* Test data+data recovery using random sampling */
+ iterations = nr_buffers * 2; /* should provide good enough coverage */
+ for (i = 0; i < iterations; i++) {
+ int faila = rand32() % nr_data, failb;
+
+ do {
+ failb = rand32() % nr_data;
+ } while (failb == faila);
+
+ test_recover_one(test, nr_buffers, len, faila, failb);
+ }
+}
+
+/* Simulate rmw run */
+static void test_rmw_one(struct kunit *test, unsigned int nr_buffers,
+ unsigned int len, int p1, int p2)
{
const struct test_args *ta = test->param_value;
- int i, j, p1, p2;
+
+ ta->gen->xor_syndrome(nr_buffers, p1, p2, len, test_buffers);
+ makedata(p1, p2);
+ ta->gen->xor_syndrome(nr_buffers, p1, p2, len, test_buffers);
+ test_recover(test, nr_buffers, len);
+}
+
+static void test_rmw(struct kunit *test, unsigned int nr_buffers,
+ unsigned int len)
+{
+ int iterations = nr_buffers / 2, i;
+
+ for (i = 0; i < iterations; i++) {
+ int p1 = rand32() % (nr_buffers - 2);
+ int p2 = rand32() % (nr_buffers - 2);
+
+ if (p2 < p1)
+ swap(p1, p2);
+ test_rmw_one(test, nr_buffers, len, p1, p2);
+ }
+}
+
+static void raid6_test_one(struct kunit *test)
+{
+ const struct test_args *ta = test->param_value;
+ /* including P/Q we need at least three buffers */
+ unsigned int nr_buffers =
+ (rand32() % (RAID6_KUNIT_MAX_BUFFERS - 2)) + 3;
+ unsigned int len = random_length(RAID6_KUNIT_MAX_BYTES);
/* Nuke syndromes */
- memset(test_buffers[NDISKS - 2], 0xee, PAGE_SIZE);
- memset(test_buffers[NDISKS - 1], 0xee, PAGE_SIZE);
+ memset(test_buffers[nr_buffers - 2], 0xee, test_buflen);
+ memset(test_buffers[nr_buffers - 1], 0xee, test_buflen);
/* Generate assumed good syndrome */
- ta->gen->gen_syndrome(NDISKS, PAGE_SIZE, test_buffers);
+ ta->gen->gen_syndrome(nr_buffers, len, test_buffers);
- for (i = 0; i < NDISKS - 1; i++)
- for (j = i + 1; j < NDISKS; j++)
- test_recover(test, i, j);
+ test_recover(test, nr_buffers, len);
- if (!ta->gen->xor_syndrome)
- return;
+ if (ta->gen->xor_syndrome)
+ test_rmw(test, nr_buffers, len);
+}
- for (p1 = 0; p1 < NDISKS - 2; p1++) {
- for (p2 = p1; p2 < NDISKS - 2; p2++) {
- /* Simulate rmw run */
- ta->gen->xor_syndrome(NDISKS, p1, p2, PAGE_SIZE,
- test_buffers);
- makedata(p1, p2);
- ta->gen->xor_syndrome(NDISKS, p1, p2, PAGE_SIZE,
- test_buffers);
-
- for (i = 0; i < NDISKS - 1; i++)
- for (j = i + 1; j < NDISKS; j++)
- test_recover(test, i, j);
- }
- }
+static void raid6_test(struct kunit *test)
+{
+ int i;
+
+ for (i = 0; i < RAID6_KUNIT_NUM_TEST_ITERS; i++)
+ raid6_test_one(test);
}
static const void *raid6_gen_params(struct kunit *test, const void *prev,
@@ -169,23 +236,24 @@ static int raid6_suite_init(struct kunit_suite *suite)
* so that it is immediately followed by a guard page. This allows
* buffer overreads to be detected, even in assembly code.
*/
+ test_buflen = round_up(RAID6_KUNIT_MAX_BYTES, PAGE_SIZE);
for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++) {
- test_recov_buffers[i] = vmalloc(PAGE_SIZE);
+ test_recov_buffers[i] = vmalloc(test_buflen);
if (!test_recov_buffers[i])
goto out_free_recov_buffers;
}
- for (i = 0; i < NDISKS; i++) {
- test_buffers[i] = vmalloc(PAGE_SIZE);
+ for (i = 0; i < RAID6_KUNIT_MAX_BUFFERS; i++) {
+ test_buffers[i] = vmalloc(test_buflen);
if (!test_buffers[i])
goto out_free_buffers;
}
- makedata(0, NDISKS - 1);
+ makedata(0, RAID6_KUNIT_MAX_BUFFERS - 1);
return 0;
out_free_buffers:
- for (i = 0; i < NDISKS; i++)
+ for (i = 0; i < RAID6_KUNIT_MAX_BUFFERS; i++)
vfree(test_buffers[i]);
memset(test_buffers, 0, sizeof(test_buffers));
out_free_recov_buffers:
@@ -199,7 +267,7 @@ static void raid6_suite_exit(struct kunit_suite *suite)
{
int i;
- for (i = 0; i < NDISKS; i++)
+ for (i = 0; i < RAID6_KUNIT_MAX_BUFFERS; i++)
vfree(test_buffers[i]);
memset(test_buffers, 0, sizeof(test_buffers));
for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++)
--
2.53.0
^ permalink raw reply related
* [PATCH 18/19] raid6_kunit: randomize parameters and increase limits
From: Christoph Hellwig @ 2026-05-12 5:20 UTC (permalink / raw)
To: Andrew Morton
Cc: Catalin Marinas, Will Deacon, Ard Biesheuvel, Huacai Chen,
WANG Xuerui, Madhavan Srinivasan, Michael Ellerman,
Nicholas Piggin, Christophe Leroy (CS GROUP), Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Heiko Carstens,
Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
Sven Schnelle, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Herbert Xu, Dan Williams,
Chris Mason, David Sterba, Arnd Bergmann, Song Liu, Yu Kuai,
Li Nan, linux-kernel, linux-arm-kernel, loongarch, linuxppc-dev,
linux-riscv, linux-s390, linux-crypto, linux-btrfs, linux-arch,
linux-raid
In-Reply-To: <20260512052230.2947683-1-hch@lst.de>
The current test has double-quadratic behavior in the selection for
the updated ("XORed") disks, and in the selection of updated pointers,
which makes scaling it to more tests difficult. At the same time it
only ever tests with the maximum number of disks, which leaves a
coverage hole for smaller ones.
Fix this by randomizing the total number, failed disks and regions
to update, and increasing the upper number of tests disks.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
lib/raid/raid6/tests/raid6_kunit.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/lib/raid/raid6/tests/raid6_kunit.c b/lib/raid/raid6/tests/raid6_kunit.c
index 775a0051f9a4..d6ac777dcaee 100644
--- a/lib/raid/raid6/tests/raid6_kunit.c
+++ b/lib/raid/raid6/tests/raid6_kunit.c
@@ -8,6 +8,7 @@
#include <kunit/test.h>
#include <linux/prandom.h>
#include <linux/vmalloc.h>
+#include <linux/raid/pq.h>
#include "../algos.h"
MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
@@ -43,6 +44,12 @@ static unsigned int random_length(unsigned int max_length)
return round_up((rand32() % max_length) + 1, 512);
}
+static unsigned int random_nr_buffers(void)
+{
+ return (rand32() % (RAID6_KUNIT_MAX_BUFFERS - (RAID6_MIN_DISKS - 1))) +
+ RAID6_MIN_DISKS;
+}
+
static void makedata(int start, int stop)
{
int i;
@@ -169,9 +176,7 @@ static void test_rmw(struct kunit *test, unsigned int nr_buffers,
static void raid6_test_one(struct kunit *test)
{
const struct test_args *ta = test->param_value;
- /* including P/Q we need at least three buffers */
- unsigned int nr_buffers =
- (rand32() % (RAID6_KUNIT_MAX_BUFFERS - 2)) + 3;
+ unsigned int nr_buffers = random_nr_buffers();
unsigned int len = random_length(RAID6_KUNIT_MAX_BYTES);
/* Nuke syndromes */
--
2.53.0
^ permalink raw reply related
* [PATCH 19/19] raid6_kunit: randomize buffer alignment
From: Christoph Hellwig @ 2026-05-12 5:20 UTC (permalink / raw)
To: Andrew Morton
Cc: Catalin Marinas, Will Deacon, Ard Biesheuvel, Huacai Chen,
WANG Xuerui, Madhavan Srinivasan, Michael Ellerman,
Nicholas Piggin, Christophe Leroy (CS GROUP), Paul Walmsley,
Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Heiko Carstens,
Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
Sven Schnelle, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Herbert Xu, Dan Williams,
Chris Mason, David Sterba, Arnd Bergmann, Song Liu, Yu Kuai,
Li Nan, linux-kernel, linux-arm-kernel, loongarch, linuxppc-dev,
linux-riscv, linux-s390, linux-crypto, linux-btrfs, linux-arch,
linux-raid
In-Reply-To: <20260512052230.2947683-1-hch@lst.de>
Add code to add random alignment to the buffers to test the case where
they are not page aligned, and to move the buffers to the end of the
allocation so that they are next to the vmalloc guard page.
This does not include the recovery buffers as the recovery requires
page alignment.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
lib/raid/raid6/tests/raid6_kunit.c | 41 +++++++++++++++++++++++++-----
1 file changed, 35 insertions(+), 6 deletions(-)
diff --git a/lib/raid/raid6/tests/raid6_kunit.c b/lib/raid/raid6/tests/raid6_kunit.c
index d6ac777dcaee..7b45c7be36fc 100644
--- a/lib/raid/raid6/tests/raid6_kunit.c
+++ b/lib/raid/raid6/tests/raid6_kunit.c
@@ -21,6 +21,7 @@ MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
static struct rnd_state rng;
static void *test_buffers[RAID6_KUNIT_MAX_BUFFERS];
+static void *aligned_buffers[RAID6_KUNIT_MAX_BUFFERS];
static void *test_recov_buffers[RAID6_KUNIT_MAX_FAILURES];
static size_t test_buflen;
@@ -50,6 +51,14 @@ static unsigned int random_nr_buffers(void)
RAID6_MIN_DISKS;
}
+/* Generate a random alignment that is a multiple of 64. */
+static unsigned int random_alignment(unsigned int max_alignment)
+{
+ if (max_alignment == 0)
+ return 0;
+ return (rand32() % (max_alignment + 1)) & ~63;
+}
+
static void makedata(int start, int stop)
{
int i;
@@ -80,7 +89,7 @@ static void test_recover_one(struct kunit *test, unsigned int nr_buffers,
for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++)
memset(test_recov_buffers[i], 0xf0, test_buflen);
- memcpy(dataptrs, test_buffers, sizeof(dataptrs));
+ memcpy(dataptrs, aligned_buffers, sizeof(dataptrs));
dataptrs[faila] = test_recov_buffers[0];
dataptrs[failb] = test_recov_buffers[1];
@@ -102,13 +111,13 @@ static void test_recover_one(struct kunit *test, unsigned int nr_buffers,
ta->recov->data2(nr_buffers, len, faila, failb, dataptrs);
}
- KUNIT_EXPECT_MEMEQ_MSG(test, test_buffers[faila], test_recov_buffers[0],
+ KUNIT_EXPECT_MEMEQ_MSG(test, aligned_buffers[faila], dataptrs[faila],
len,
"faila miscompared: %3d[%c] buffers %u len %u (failb=%3d[%c])\n",
faila, member_type(nr_buffers, faila),
nr_buffers, len,
failb, member_type(nr_buffers, failb));
- KUNIT_EXPECT_MEMEQ_MSG(test, test_buffers[failb], test_recov_buffers[1],
+ KUNIT_EXPECT_MEMEQ_MSG(test, aligned_buffers[failb], dataptrs[failb],
len,
"failb miscompared: %3d[%c] buffers %u len %u (faila=%3d[%c])\n",
failb, member_type(nr_buffers, failb),
@@ -152,9 +161,9 @@ static void test_rmw_one(struct kunit *test, unsigned int nr_buffers,
{
const struct test_args *ta = test->param_value;
- ta->gen->xor_syndrome(nr_buffers, p1, p2, len, test_buffers);
+ ta->gen->xor_syndrome(nr_buffers, p1, p2, len, aligned_buffers);
makedata(p1, p2);
- ta->gen->xor_syndrome(nr_buffers, p1, p2, len, test_buffers);
+ ta->gen->xor_syndrome(nr_buffers, p1, p2, len, aligned_buffers);
test_recover(test, nr_buffers, len);
}
@@ -178,13 +187,33 @@ static void raid6_test_one(struct kunit *test)
const struct test_args *ta = test->param_value;
unsigned int nr_buffers = random_nr_buffers();
unsigned int len = random_length(RAID6_KUNIT_MAX_BYTES);
+ unsigned int max_alignment;
+ int i;
/* Nuke syndromes */
memset(test_buffers[nr_buffers - 2], 0xee, test_buflen);
memset(test_buffers[nr_buffers - 1], 0xee, test_buflen);
+ /*
+ * If we're not using the entire buffer size, inject randomize alignment
+ * into the buffer.
+ */
+ max_alignment = RAID6_KUNIT_MAX_BYTES - len;
+ if (rand32() % 2 == 0) {
+ /* Use random alignments mod 64 */
+ for (i = 0; i < nr_buffers; i++)
+ aligned_buffers[i] = test_buffers[i] +
+ random_alignment(max_alignment);
+ } else {
+ /* Go up to the guard page, to catch buffer overreads */
+ unsigned int align = test_buflen - len;
+
+ for (i = 0; i < nr_buffers; i++)
+ aligned_buffers[i] = test_buffers[i] + align;
+ }
+
/* Generate assumed good syndrome */
- ta->gen->gen_syndrome(nr_buffers, len, test_buffers);
+ ta->gen->gen_syndrome(nr_buffers, len, aligned_buffers);
test_recover(test, nr_buffers, len);
--
2.53.0
^ permalink raw reply related
* RE: [PATCH v6 net-next 15/15] net: dsa: netc: add support for ethtool private statistics
From: Wei Fang @ 2026-05-12 6:00 UTC (permalink / raw)
To: Networking
Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org,
linux-arm-kernel@lists.infradead.org, imx@lists.linux.dev,
Claudiu Manoil, Vladimir Oltean, Clark Wang,
andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, robh@kernel.org,
krzk+dt@kernel.org, conor+dt@kernel.org, f.fainelli@gmail.com,
Frank Li, chleroy@kernel.org, horms@kernel.org,
linux@armlinux.org.uk, maxime.chevallier@bootlin.com,
andrew@lunn.ch, olteanv@gmail.com
In-Reply-To: <20260509102954.4116624-16-wei.fang@nxp.com>
I noticed that sashiko-nipa aslo reported some warnings, most of them
are minor issues or false positives. I will fix/improve them in the next
version. Only this patch reported a high warning, but I don't think it's
a problem. See sashiko's comment and my reply below.
Link: https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260509102954.4116624-1-wei.fang%40nxp.com
> +static const struct netc_port_stat netc_port_counters[] = {
> + { NETC_PTGSLACR, "port gate late arrival frames" },
> + { NETC_PSDFTCR, "port SDF transmit frames" },
> + { NETC_PSDFDDCR, "port SDF drop duplicate frames" },
> + { NETC_PRXDCR, "port rx discard frames" },
> + { NETC_PRXDCRRR, "port rx discard read-reset" },
> + { NETC_PRXDCRR0, "port rx discard reason 0" },
> + { NETC_PRXDCRR1, "port rx discard reason 1" },
> + { NETC_PTXDCR, "port tx discard frames" },
> + { NETC_PTXDCRRR, "port tx discard read-reset" },
> + { NETC_PTXDCRR0, "port tx discard reason 0" },
> + { NETC_PTXDCRR1, "port tx discard reason 1" },
> + { NETC_BPDCR, "bridge port discard frames" },
> + { NETC_BPDCRRR, "bridge port discard read-reset" },
> + { NETC_BPDCRR0, "bridge port discard reason 0" },
> + { NETC_BPDCRR1, "bridge port discard reason 1" },
> +};
Should the port rx/tx discard frame counts and the bridge port discard
frame count be exposed through ethtool -S at all? These look like values
that map onto the standard rtnl_link_stats64 fields (rx_dropped /
tx_dropped) reported via ndo_get_stats64 and visible through "ip -s link
show" on the DSA user netdev.
[Wei Fang] The port rx/tx discard frame counts and the bridge port discard
frame count are used to count the number of packets lost due to certain
reasons including buffer exhaustion. By querying the packet loss reason
register, users can clearly understand why the frames are dropped. These
counters are not the same concept as rx_dropped/tx_dropped in
rtnl_link_stats64. For example, rx_dropped should not includes packets
dropped by the device due to buffer exhaustion, but PRXDCR includes them.
Documentation/networking/statistics.rst calls out that ethtool -S is for
driver-private counters only, and the networking review guidance asks
that stats which already have a standard uAPI not be duplicated under
ethtool -S even when the driver is not currently feeding the standard
interface. Could the discard frame totals be routed through
ndo_get_stats64 instead, leaving only the truly private parts (the
per-reason RR0/RR1 codes, the SDF counters, the gate late-arrival
counter) under ethtool -S?
[Wei Fang] As I explained above, I would like to keep them in the
driver-private counters.
Is including NETC_PRXDCRRR / NETC_PTXDCRRR / NETC_BPDCRRR in the routine
ethtool -S read path intentional? The "RR" suffix on these registers
[Wei Fang] Yes, for example, NETC_PRXDCR represents the total statistics,
while NETC_PRXDCRRR represents the statistics between the last read and
the current read. During user debugging, this register, along with the packet
drop reason register, can be used to determine the cause of packet drop
during this period.
appears to denote read-reset semantics; the sibling ENETC4 driver
documents the same naming convention, e.g. in
drivers/net/ethernet/freescale/enetc/enetc4_hw.h:
/* Port Rx discard count read-reset register */
... ENETC4_PRXDCRRR ...
netc_port_get_ethtool_stats() reads them on every invocation:
for (i = 0; i < ARRAY_SIZE(netc_port_counters); i++)
*data++ = netc_port_rd(np, netc_port_counters[i].reg);
If reading PRXDCRRR/PTXDCRRR/BPDCRRR clears the underlying counter as a
side effect, then "watch ethtool -S" or any periodic poll will see a
delta-since-last-read value rather than a cumulative total, and two
concurrent observers will perturb each other's view. Would it be safer
to expose only the non-reset variants (PRXDCR/PTXDCR/BPDCR, which are
already in this list as "port rx/tx discard frames" and "bridge port
discard frames") here, and move the read-reset aliases to a one-shot
debug interface such as devlink or debugfs?
[Wei Fang] Currently, we do not support devlink and debugfs, which
makes debugging packet drop issues quite cumbersome for users.
This current approach can serve as a transitional solution; we can
remove it from ethtool -S when debugfs or devlink are supported.
> +
> +static const struct netc_port_stat netc_emac_counters[] = {
> + { NETC_PM_ROCT(0), "eMAC rx octets" },
> + { NETC_PM_RVLAN(0), "eMAC rx VLAN frames" },
> + { NETC_PM_RERR(0), "eMAC rx frame errors" },
> + { NETC_PM_RUCA(0), "eMAC rx unicast frames" },
> + { NETC_PM_RDRP(0), "eMAC rx dropped packets" },
> + { NETC_PM_RPKT(0), "eMAC rx packets" },
> + { NETC_PM_TOCT(0), "eMAC tx octets" },
> + { NETC_PM_TVLAN(0), "eMAC tx VLAN frames" },
> + { NETC_PM_TFCS(0), "eMAC tx FCS errors" },
> + { NETC_PM_TUCA(0), "eMAC tx unicast frames" },
> + { NETC_PM_TPKT(0), "eMAC tx packets" },
> + { NETC_PM_TUND(0), "eMAC tx undersized packets" },
> + { NETC_PM_TIOCT(0), "eMAC tx invalid octets" },
> +};
> +
> +static const struct netc_port_stat netc_pmac_counters[] = {
> + { NETC_PM_ROCT(1), "pMAC rx octets" },
> + { NETC_PM_RVLAN(1), "pMAC rx VLAN frames" },
> + { NETC_PM_RERR(1), "pMAC rx frame errors" },
> + { NETC_PM_RUCA(1), "pMAC rx unicast frames" },
> + { NETC_PM_RDRP(1), "pMAC rx dropped packets" },
> + { NETC_PM_RPKT(1), "pMAC rx packets" },
> + { NETC_PM_TOCT(1), "pMAC tx octets" },
> + { NETC_PM_TVLAN(1), "pMAC tx VLAN frames" },
> + { NETC_PM_TFCS(1), "pMAC tx FCS errors" },
> + { NETC_PM_TUCA(1), "pMAC tx unicast frames" },
> + { NETC_PM_TPKT(1), "pMAC tx packets" },
> + { NETC_PM_TUND(1), "pMAC tx undersized packets" },
> + { NETC_PM_TIOCT(1), "pMAC tx invalid octets" },
> +};
Do most of these eMAC and pMAC strings duplicate counters that already
have a standard uAPI?
[Wei Fang] No, the standard uAPI is implemented in patch 14. This part of
the statistics is not supported by the standard API.
Several look like direct overlaps with struct ethtool_eth_mac_stats,
which this driver already populates via .get_eth_mac_stats:
eMAC/pMAC rx octets (NETC_PM_ROCT) vs OctetsReceivedOK
(already exposed via NETC_PM_REOCT)
eMAC/pMAC tx octets (NETC_PM_TOCT) vs OctetsTransmittedOK
(already exposed via NETC_PM_TEOCT)
eMAC/pMAC rx packets (NETC_PM_RPKT) vs FramesReceivedOK (NETC_PM_RFRM)
eMAC/pMAC tx packets (NETC_PM_TPKT) vs FramesTransmittedOK (NETC_PM_TFRM)
eMAC/pMAC tx FCS errors / rx frame errors
vs FrameCheckSequenceErrors and the
FramesLostDueToIntMAC*Error fields
[Wei Fang] They are different registers and the statistical data they
produce is different. In addition, FrameCheckSequenceErrors is used
for RX not TX.
Others overlap rtnl_link_stats64 (visible via "ip -s link show"):
rx octets / tx octets -> rx_bytes / tx_bytes
rx packets / tx packets -> rx_packets / tx_packets
rx dropped packets (RDRP) -> rx_dropped
rx/tx unicast frames -> derivable from rtnl_link_stats64's
total/multicast/broadcast triplet
[Wei Fang] As I explained in v5, rtnl_link_stats64 is used to collect total
statistics for the network device. For NETC switch, its ports support
preemption, so each port has two MACs, the netc_p/emac_counters is
used to collect statistics for each MAC. Their usage are different.
And tx undersized packets (NETC_PM_TUND) overlaps the rmon undersize
buckets that .get_rmon_stats already reports.
[Wei Fang] The undersize_pkts of struct ethtool_rmon_stats is used for RX
not TX.
^ permalink raw reply
* Re: IBM Power S822LC: pci 0021:0d:00.0: xHCI HW did not halt within 32000 usec status = 0x0
From: Paul Menzel @ 2026-05-12 6:17 UTC (permalink / raw)
To: Michal Pecio
Cc: Mathias Nyman, Greg Kroah-Hartman, linux-usb, LKML, linuxppc-dev
In-Reply-To: <20260512012006.66aeb0c5.michal.pecio@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 5871 bytes --]
Dear Michal,
Thank you for your reply.
Am 12.05.26 um 01:20 schrieb Michal Pecio:
> On Mon, 11 May 2026 23:57:33 +0200, Paul Menzel wrote:
>> Am 06.05.26 um 19:30 schrieb Michal Pecio:
>>> On Wed, 6 May 2026 18:06:20 +0200, Paul Menzel wrote:
>>>> On the IBM Power S822LC (8335-GCA POWER8), rebooting into Linux 7.1-rc2+
>>>> with kexec results in the warning below:
>>>>
>>>> [ 0.000000] Linux version 7.1.0-rc2+ (x@b) (gcc (Ubuntu 11.2.0-7ubuntu2) 11.2.0, GNU ld (GNU Binutils for Ubuntu) 2.37) #3 SMP PREEMPT Wed May 6 08:50:5
>>>> […]
>>>> [ 0.000000] Hardware name: 8335-GCA POWER8 (raw) 0x4d0200 opal:skiboot-5.4.8-5787ad3 PowerNV
>>>> […]
>>>> [ 1.593760] NET: Registered PF_UNIX/PF_LOCAL protocol family
>>>> [ 1.593859] pci 0021:0d:00.0: enabling device (0140 -> 0142)
>>>> [ 1.627080] pci 0021:0d:00.0: xHCI HW did not halt within 32000 usec status = 0x0
>>>> [ 1.627094] pci 0021:0d:00.0: quirk_usb_early_handoff+0x0/0x300 took 32465 usecs
>>>> [ 1.627123] PCI: CLS 0 bytes, default 128
>>
>>> Does it work any better if kexecing other kernel versions?
>>
>> No, the problem goes as far back as 5.17-rc7. (I didn’t try anything
>> before.)
>>
>>> What if you increase XHCI_MAX_HALT_USEC by 10* or 100* ?
>>
>> I have to test this.
>
> I missed your dmesg attachment previously.
>
> This may not help if another halt attempt 200ms later fails too.
> Per spec (5.4.1.1), the HC is supposed to complete halt in 16ms.
>
>>> Does the controller work normally after this warning?
>> It does not look like it. In the log attached to my report, later on
>> there is:
>>
>> [ 1.739374] xhci_hcd 0021:0d:00.0: xHCI Host Controller
>> [ 1.739431] xhci_hcd 0021:0d:00.0: new USB bus registered,
>> assigned bus number 1
>> [ 1.794727] Freeing initrd memory: 52928K
>> [ 1.801984] xhci_hcd 0021:0d:00.0: Host halt failed, -110
>> [ 1.801988] xhci_hcd 0021:0d:00.0: can't setup: -110
>> [ 1.802137] xhci_hcd 0021:0d:00.0: USB bus 1 deregistered
>> [ 1.802154] xhci_hcd 0021:0d:00.0: init 0021:0d:00.0 fail, -110
>> [ 1.802250] xhci_hcd 0021:0d:00.0: probe with driver xhci_hcd failed with error -110
>
> Right, this chip seems stuck and the driver fails to reinitialize it.
>
>> PS: Claude Sonnet 4.6 cooked up the attached patch, which does *not*
>> help though, but does get it to the return code 0x10, which Claude
>> replied to with:
>>
>>> ● The status change 0x0 → 0x10 is meaningful: 0x10 is PCD (Port Change Detect, bit 4),
>>> HCHalted=0. The old-kernel reset (from our commit) did take effect …
>
> Do you mean that running xhci_reset() before kexec() causes the new
> kernel to see 0x10 instead of 0x0 in the status register? Is this
> reproducible, not random or a one time fluke?
It’s reproducible.
> A little odd, one could expect reset to have the opposite effect.
>
> Is there truly some machine firmware running during kexec() and using
> the HC, as your LLM says?
Sorry, I should have only posted the diff. Claude Sonnet’s assumption,
that OPAL is involved when kexec’ing is incorrect to my knowledge. Also,
I do not know, why there is no such problem with the kexec-based
bootloader Petitboot [1].
> I honestly don't know what to do with this. I think I would start with
> looking whether xhci_shutdown() in the old kernel manages to halt it
> successfully or if it also fails, and what's the USBSTS there.
>
> It seems that you can get such information by enabling dynamic debug
>
> echo 'module xhci_hcd +p' >/proc/dynamic_debug/control
>
> and capturing old kernel's log up to kexec() through a serial cable.
Unfortunately, nothing is logged over the serial console (BMC SOL) after
running `sudo kexec -e` or `sudo systemctl reboot`. I just see:
[69530.180531343,5] OPAL: Switch to big-endian OS
[69538.407292205,5] OPAL: Switch to little-endian OS
Which is the OPAL firmware, so it might be involved? No idea, if it
touches the xHCI controller. But strangely no xHCI messages are there –
also after booting with Petitboot and initialized xHCI controller? No
idea, if it points to, that during kexec or shutdown nothing is power off?
With `sudo systemctl reboot` only the line below are logged:
[ 121.811384] libvirt-guests.sh[3366]: Running guests on default URI:
[ 121.811988] libvirt-guests.sh[3376]: no running guests.
[ … (systemd service stop notifications)]
[ 136.254846] systemd-shutdown[1]: Waiting for process: watch_ldconfig
[ 218.549684] reboot: Restarting system
[69760.484679183,5] OPAL: Reboot request...
3.55778|Ignoring boot flags, incorrect version 0x0
3.59881|ISTEP 6. 3
On reboot with dynamic debug enabled for all files under `drivers/usb/`
[ 0.000000] Kernel command line:
root=UUID=2c3dd738-785a-469b-843e-9f0ba8b47b0d ro rootflags=subvol=@
debug dyndbg="file drivers/usb/* +p"
the messages below are logged:
[…]
[ 1.747254] pci 0021:0d:00.0: enabling device (0140 -> 0142)
[ 1.780627] pci 0021:0d:00.0: xHCI HW did not halt within 32000
usec status = 0x10
[ 2.013904] pci 0021:0d:00.0: quirk_usb_early_handoff+0x0/0x304
took 260410 usecs
[…]
[ 2.126883] ehci_hcd: block sizes: qh 144 qtd 96 itd 192 sitd 96
[ 2.126979] ohci_hcd: block sizes: ed 112 td 96
[ 2.127558] xhci_hcd 0021:0d:00.0: xHCI Host Controller
[ 2.127629] xhci_hcd 0021:0d:00.0: new USB bus registered,
assigned bus number 1
[ 2.127791] xhci_hcd 0021:0d:00.0: // Halt the HC
[…]
Please find attached a log of a “Petitboot reboot” with dynamic debug
enabled and the xHCI controller being initialized.
Kind regards,
Paul
[1]: https://open-power.github.io/petitboot/overview.html
[-- Attachment #2: 2026512--ibm-power-s822lc--system-firmware--petitboot--linux-7.1-rc3+--messages-from-bmc-sol.txt --]
[-- Type: text/plain, Size: 101237 bytes --]
[ OK ] Reached target Reboot.
[ 136.254846] systemd-shutdown[1]: Waiting for process: watch_ldconfig
[ 218.549684] reboot: Restarting system
[69760.484679183,5] OPAL: Reboot request...
3.55778|Ignoring boot flags, incorrect version 0x0
3.59881|ISTEP 6. 3
4.07483|ISTEP 6. 4
4.07573|ISTEP 6. 5
15.94154|HWAS|PRESENT> DIMM[03]=AAAAAAAAAAAAAAAA
15.94155|HWAS|PRESENT> Membuf[04]=CCCC000000000000
15.94155|HWAS|PRESENT> Proc[05]=C000000000000000
16.04125|ISTEP 6. 6
16.14925|ISTEP 6. 7
17.96459|ISTEP 6. 8
18.00345|ISTEP 6. 9
19.03391|ISTEP 6.10
19.06355|ISTEP 6.11
20.79904|ISTEP 6.12
20.80057|ISTEP 6.13
20.80108|ISTEP 7. 1
20.86926|ISTEP 7. 2
20.98399|ISTEP 7. 3
21.01609|ISTEP 7. 4
21.05662|ISTEP 7. 5
21.28237|ISTEP 7. 6
21.31203|ISTEP 7. 7
21.53382|ISTEP 7. 8
21.68040|ISTEP 7. 9
21.68112|ISTEP 8. 1
21.84613|ISTEP 8. 2
22.66079|ISTEP 8. 3
22.67099|ISTEP 8. 4
22.90594|ISTEP 8. 5
22.90662|ISTEP 8. 6
23.51434|ISTEP 8. 7
23.51485|ISTEP 8. 8
23.52607|ISTEP 9. 1
23.96245|ISTEP 9. 2
24.93432|ISTEP 10. 1
25.24073|ISTEP 10. 2
26.57594|ISTEP 10. 3
26.57670|ISTEP 10. 4
26.57755|ISTEP 10. 5
26.58028|ISTEP 10. 6
26.58096|ISTEP 10. 7
26.58171|ISTEP 10. 8
26.58226|ISTEP 10. 9
26.58371|ISTEP 10.10
26.58423|ISTEP 10.11
26.58479|ISTEP 10.12
26.58554|ISTEP 10.13
26.58621|ISTEP 10.14
26.58686|ISTEP 11. 1
26.91702|ISTEP 11. 2
26.91770|ISTEP 11. 3
27.11370|ISTEP 11. 4
27.31698|ISTEP 11. 5
27.50244|ISTEP 11. 6
29.60954|ISTEP 11. 7
29.61067|ISTEP 11. 8
30.20078|ISTEP 11. 9
30.20189|ISTEP 11.10
30.29292|ISTEP 11.11
30.29351|ISTEP 11.12
30.29408|ISTEP 11.13
30.29708|ISTEP 12. 1
30.43517|ISTEP 12. 2
30.51834|ISTEP 12. 3
30.55074|ISTEP 12. 4
30.94139|ISTEP 12. 5
30.94200|ISTEP 13. 1
31.05412|ISTEP 13. 2
31.09793|ISTEP 13. 3
31.09890|ISTEP 13. 4
31.12123|ISTEP 13. 5
31.12979|ISTEP 13. 6
32.74207|ISTEP 13. 7
33.04061|ISTEP 13. 8
33.27481|ISTEP 13. 9
41.39987|ISTEP 13.10
41.43510|ISTEP 13.11
41.64725|ISTEP 13.12
41.64787|ISTEP 14. 1
41.68187|ISTEP 14. 2
41.70307|ISTEP 14. 3
52.76563|ISTEP 14. 4
52.95543|ISTEP 14. 5
53.14179|ISTEP 14. 6
53.15399|ISTEP 14. 7
53.38434|ISTEP 14. 8
53.38658|ISTEP 15. 1
54.58624|ISTEP 15. 2
54.60815|ISTEP 15. 3
54.76842|ISTEP 16. 1
55.98270|ISTEP 16. 2
56.56017|ISTEP 16. 3
56.60654|ISTEP 16. 4
56.59459|ISTEP 18.13
56.76118|ISTEP 18.14
56.76014|ISTEP 20. 1
57.49291|ISTEP 21. 1
71.35695|htmgt|OCCs are now running in ACTIVE state
79.91373|ISTEP 21. 2
79.91461|ISTEP 21. 3
[ 80.117982180,5] SkiBoot skiboot-5.4.8-5787ad3 starting...
[ 80.117987063,5] initial console log level: memory 7, driver 5
[ 80.117990236,6] CPU: P8 generation processor(max 8 threads/core)
[ 80.117993016,7] CPU: Boot CPU PIR is 0x0448 PVR is 0x004d0200
[ 80.117996115,7] CPU: Initial max PIR set to 0x1fff
[ 80.118480557,5] OPAL table: 0x300bfc40 .. 0x300c0110, branch table: 0x30002000
[ 80.118487216,5] FDT: Parsing fdt @0xff00000
[ 80.125002864,5] XSCOM: chip 0x0 at 0x3fc0000000000 [P8 DD2.0]
[ 80.125013978,5] XSCOM: chip 0x8 at 0x3fc4000000000 [P8 DD2.0]
[ 80.125022156,6] XSTOP: XSCOM addr = 0x2010c82, FIR bit = 31
[ 80.125025715,6] MFSI 0:0: Initialized
[ 80.125028115,6] MFSI 0:2: Initialized
[ 80.125030391,6] MFSI 0:1: Initialized
[ 80.125032997,6] MFSI 8:0: Initialized
[ 80.125035229,6] MFSI 8:2: Initialized
[ 80.125037501,6] MFSI 8:1: Initialized
[ 80.125446754,5] LPC: LPC[000]: Initialized, access via XSCOM @0xb0020
[ 80.125594474,5] LPC: LPC: Default bus on chip 0x0
[ 80.125781476,6] MEM: parsing reserved memory from node /ibm,hostboot/reserved-memory
[ 80.125792012,7] HOMER: Init chip 0
[ 80.125795084,7] PBA BAR0 : 0x000000fffd800000
[ 80.125797937,7] PBA MASK0: 0x0000000000300000
[ 80.125800762,7] HOMER Image at 0xfffd800000 size 4MB
[ 80.125804558,7] PBA BAR2 : 0x400000fffda00000
[ 80.125807377,7] PBA MASK2: 0x0000000000000000
[ 80.125809969,7] SLW Image at 0xfffda00000 size 1MB
[ 80.125813596,7] PBA BAR3 : 0x000000ffff800000
[ 80.125816285,7] PBA MASK3: 0x0000000000700000
[ 80.125818974,7] OCC Common Area at 0xffff800000 size 8MB
[ 80.125822027,7] HOMER: Init chip 8
[ 80.125824767,7] PBA BAR0 : 0x000000fffdc00000
[ 80.125827488,7] PBA MASK0: 0x0000000000300000
[ 80.125830137,7] HOMER Image at 0xfffdc00000 size 4MB
[ 80.125833953,7] PBA BAR2 : 0x400000fffde00000
[ 80.125836700,7] PBA MASK2: 0x0000000000000000
[ 80.125839337,7] SLW Image at 0xfffde00000 size 1MB
[ 80.125843076,7] PBA BAR3 : 0x000000ffff800000
[ 80.125845799,7] PBA MASK3: 0x0000000000700000
[ 80.125848466,7] OCC Common Area at 0xffff800000 size 8MB
[ 80.125869570,7] CPU idle state device tree init
[ 80.125873204,4] SLW: HB-provided idle states property found
[ 80.126083282,7] AST: PNOR LPC offset: 0x0c000000
[ 80.126166842,5] PLAT: Using virtual UART
[ 80.126528216,7] UART: Using LPC IRQ 4
[ 80.143999154,5] PLAT: Detected Firestone platform
[ 80.144135666,5] PLAT: Detected BMC platform AMI
[ 80.148585815,5] CENTAUR: Found centaur for chip 0x0 channel 0
[ 80.148699427,5] CENTAUR: FSI host: 0x0 cMFSI0 port 3
[ 80.152233333,5] CENTAUR: Found centaur for chip 0x0 channel 1
[ 80.153362406,5] CENTAUR: FSI host: 0x0 cMFSI0 port 2
[ 80.153531603,5] CENTAUR: Found centaur for chip 0x0 channel 4
[ 80.153673101,5] CENTAUR: FSI host: 0x0 cMFSI0 port 7
[ 80.153836896,5] CENTAUR: Found centaur for chip 0x0 channel 5
[ 80.153979684,5] CENTAUR: FSI host: 0x0 cMFSI0 port 6
[ 80.154127591,5] CENTAUR: Found centaur for chip 0x8 channel 0
[ 80.154254399,5] CENTAUR: FSI host: 0x8 cMFSI0 port 3
[ 80.154403686,5] CENTAUR: Found centaur for chip 0x8 channel 1
[ 80.154535133,5] CENTAUR: FSI host: 0x8 cMFSI0 port 2
[ 80.154691074,5] CENTAUR: Found centaur for chip 0x8 channel 4
[ 80.154829556,5] CENTAUR: FSI host: 0x8 cMFSI0 port 7
[ 80.154989938,5] CENTAUR: Found centaur for chip 0x8 channel 5
[ 80.155132165,5] CENTAUR: FSI host: 0x8 cMFSI0 port 6
[ 80.155465473,5] PSI[0x000]: Found PSI bridge [active=0]
[ 80.155592181,5] PSI[0x008]: Found PSI bridge [active=0]
[ 80.158614429,5] CPU: All 160 processors called in...
[ 3.233065494,5] FLASH: Found system flash: Micron N25Qx512Ax id:0
[ 3.233233068,5] BT: Interface initialized, IO 0x00e4
[ 4.182382675,5] NVRAM: Size is 576 KB
[ 4.369080420,5] STB: secure mode off
[ 4.369140092,5] STB: trusted mode off
[ 4.369566159,5] CAPI: Preloading ucode 200ea
[ 4.369639028,5] FLASH: Queueing preload of 2/200ea
[ 4.370686865,5] FLASH: Queueing preload of 0/0
[ 4.370941121,5] FLASH: Queueing preload of 1/0
[ 4.370957164,7] FFS: Partition map size: 0x1000
[ 4.389039663,5] STB: sb_verify skipped resource 2, secure_mode=0
[ 4.389079966,5] Chip 0 Found PBCQ0 at /xscom@3fc0000000000/pbcq@2012000
[ 4.389083430,7] PHB3[0:0]: X[PE]=0x02012000 X[PCI]=0x09012000 X[SPCI]=0x09013c00
[ 4.389135807,7] PHB3[0:0] REGS = 0x0003fffe40000000 [4k]
[ 4.392477649,7] PHB3[0:0] PCIBAR = 0x0003fffe40000000
[ 4.392622719,7] PHB3[0:0] MMIO0 = 0x0000200000000000 [0x0000010000000000]
[ 4.392760725,7] PHB3[0:0] MMIO1 = 0x00003fe000000000 [0x0000000080000000]
[ 4.393095987,5] STB: tb_measure skipped resource 2, trusted_mode=0
[ 4.393096019,7] PHB3[0:0] BAREN = 0xf800000000000000
[ 4.393100878,7] PHB3[0:0] NEWBAREN = 0xf800000000000000
[ 4.393251009,7] PHB3[0:0] IRSNC = 0x0100000000000000
[ 4.393538459,7] PHB3[0:0] IRSNM = 0xff00000000000000
[ 4.393540047,7] PHB3[0:0] LSI = 0xff00000000000000
[ 4.393549399,5] Chip 0 Found PBCQ1 at /xscom@3fc0000000000/pbcq@2012400
[ 4.393552740,7] PHB3[0:1]: X[PE]=0x02012400 X[PCI]=0x09012400 X[SPCI]=0x09013c40
[ 4.393684174,7] PHB3[0:1] REGS = 0x0003fffe40100000 [4k]
[ 4.394560018,5] Chip 8 Found PBCQ0 at /xscom@3fc4000000000/pbcq@2012000
[ 4.420029039,5] Chip 8 Found PBCQ1 at /xscom@3fc4000000000/pbcq@2012400
[ 4.498102214,5] Chip 8 Found PBCQ2 at /xscom@3fc4000000000/pbcq@2012800
[ 5.307139256,3] PHB#0000: Base location code not found !
[ 12.195095370,3] PHB#0001: Base location code not found !
[ 14.099757254,5] STB: sb_verify skipped resource 0, secure_mode=0
[ 14.099765189,7] BT: seq 0x06 netfn 0x06 cmd 0x2e: Message sent to host
[ 14.103404449,5] STB: tb_measure skipped resource 0, trusted_mode=0
[ 14.106082703,3] FLASH: No ROOTFS partition
[ 14.106082366,7] PHB#0001: Default system config: 0x441100fc30000000
[ 14.106085028,7] PHB#0001: New system config : 0x441000fc30000000
[ 14.106086927,7] PHB#0001: PHB_RESET is 0x0000000000000000
[ 14.106380480,7] PHB#0001: Waiting for DLP PG reset to complete...
[ 14.116134664,3] PHB#0020: Base location code not found !
[ 14.177545774,3] PHB#0021: Base location code not found !
[ 14.239001217,3] PHB#0022: Base location code not found !
[ 14.300659349,5] PCI: Resetting PHBs...
[ 15.403506378,5] PCI: Probing slots...
[ 17.050652146,5] PHB#0000:00:00.0 [ROOT] 1014 03dc R:00 C:060400 B:01..ff SLOT=Slot5
[ 17.057843060,5] PHB#0001:00:00.0 [ROOT] 1014 03dc R:00 C:060400 B:01..01 SLOT=Slot4
[ 17.058056959,5] PHB#0001:01:00.0 [EP ] 14e4 168a R:10 C:020000 ( ethernet) LOC_CODE=Slot4
[ 17.058399770,5] PHB#0001:01:00.1 [EP ] 14e4 168a R:10 C:020000 ( ethernet) LOC_CODE=Slot4
[ 17.058581757,5] PHB#0001:01:00.2 [EP ] 14e4 168a R:10 C:020000 ( ethernet) LOC_CODE=Slot4
[ 17.058821871,5] PHB#0001:01:00.3 [EP ] 14e4 168a R:10 C:020000 ( ethernet) LOC_CODE=Slot4
[ 17.059004337,5] PHB#0020:00:00.0 [ROOT] 1014 03dc R:00 C:060400 B:01..ff SLOT=Slot2
[ 17.063433559,5] PHB#0021:00:00.0 [ROOT] 1014 03dc R:00 C:060400 B:01..15 SLOT=Backplane PLX
[ 17.066253618,5] PHB#0021:01:00.0 [SWUP] 10b5 8725 R:ca C:060400 B:02..15 LOC_CODE=Backplane PLX
[ 17.066560945,5] PHB#0021:02:01.0 [SWDN] 10b5 8725 R:ca C:060400 B:03..07 SLOT=Slot3
[ 17.066717637,5] PHB#0021:02:08.0 [SWDN] 10b5 8725 R:ca C:060400 B:08..0c
[ 17.066874277,5] PHB#0021:02:09.0 [SWDN] 10b5 8725 R:ca C:060400 B:0d..0d SLOT=Backplane USB
[ 17.067106465,5] PHB#0021:0d:00.0 [EP ] 104c 8241 R:02 C:0c0330 ( usb-xhci) LOC_CODE=Backplane USB
[ 17.067297268,5] PHB#0021:02:0a.0 [SWDN] 10b5 8725 R:ca C:060400 B:0e..0e SLOT=Backplane SATA
[ 17.067533050,5] PHB#0021:0e:00.0 [LGCY] 1b4b 9235 R:11 C:010601 ( sata) LOC_CODE=Backplane SATA
[ 17.067730570,5] PHB#0021:02:0b.0 [SWDN] 10b5 8725 R:ca C:060400 B:0f..10 SLOT=Backplane BMC
[ 17.067947977,5] PHB#0021:0f:00.0 [ETOX] 1a03 1150 R:03 C:060400 B:10..10 LOC_CODE=Backplane BMC
[ 17.068186999,5] PHB#0021:10:00.0 [PCID] 1a03 2000 R:30 C:030000 ( vga) LOC_CODE=Backplane BMC
[ 17.068365599,5] PHB#0021:02:0c.0 [SWDN] 10b5 8725 R:ca C:060400 B:11..15
[ 17.068521160,5] PHB#0021:01:00.1 [EP ] 10b5 87d0 R:ca C:088000 (system-peripheral) LOC_CODE=Backplane PLX
[ 17.068771935,5] PHB#0021:01:00.2 [EP ] 10b5 87d0 R:ca C:088000 (system-peripheral) LOC_CODE=Backplane PLX
[ 17.069032903,5] PHB#0021:01:00.3 [EP ] 10b5 87d0 R:ca C:088000 (system-peripheral) LOC_CODE=Backplane PLX
[ 17.081235104,5] PHB#0021:01:00.4 [EP ] 10b5 87d0 R:ca C:088000 (system-peripheral) LOC_CODE=Backplane PLX
[ 17.081682809,5] PHB#0022:00:00.0 [ROOT] 1014 03dc R:00 C:060400 B:01..ff SLOT=Slot1
[ 17.082095871,5] Releasing unused memory:
Petitboot (v1.4.4-e414dbe) 8335-GCA 781329A
──────────────────────────────────────────────────────────────────────────────
Ubuntu, with Linux 6.18.0 (recovery mode)
Ubuntu, with Linux 6.18.0
Ubuntu, with Linux 7.1.0-rc2+ (recovery mode)
Ubuntu, with Linux 7.1.0-rc2+
Ubuntu, with Linux 7.1.0-rc3+ (recovery mode)
Ubuntu, with Linux 7.1.0-rc3+
Ubuntu, with Linux 7.1.0-rc3-00003-g25aa150d26ed (recovery mode)
Ubuntu, with Linux 7.1.0-rc3-00003-g25aa150d26ed
Ubuntu, with Linux 7.1.0-rc3-00004-g3cc4dd04d913 (recovery mode)
* Ubuntu, with Linux 7.1.0-rc3-00004-g3cc4dd04d913
Ubuntu, with Linux 7.1.0-rc3-00004-g6ce87c477add (recovery mode)
Ubuntu, with Linux 7.1.0-rc3-00004-g6ce87c477add
Ubuntu
System information
System configuration
System status log
Language
Rescan devices
──────────────────────────────────────────────────────────────────────────────
Enter=accept, e=edit, n=new, x=exit, l=language, g=log, h=help
The system is going down NOW!
Sent SIGTERM to all processes
Sent SIGKILL to all processes
[ 262.992689] kexec_core: Starting new kernel
[ 285.266465642,5] OPAL: Switch to big-endian OS
[ 288.033408942,5] OPAL: Switch to little-endian OS
[ 0.000000] hash-mmu: Page sizes from device-tree:
[ 0.000000] hash-mmu: base_shift=12: shift=12, sllp=0x0000, avpnm=0x00000000, tlbiel=1, penc=0
[ 0.000000] hash-mmu: base_shift=12: shift=16, sllp=0x0000, avpnm=0x00000000, tlbiel=1, penc=7
[ 0.000000] hash-mmu: base_shift=12: shift=24, sllp=0x0000, avpnm=0x00000000, tlbiel=1, penc=56
[ 0.000000] hash-mmu: base_shift=16: shift=16, sllp=0x0110, avpnm=0x00000000, tlbiel=1, penc=1
[ 0.000000] hash-mmu: base_shift=16: shift=24, sllp=0x0110, avpnm=0x00000000, tlbiel=1, penc=8
[ 0.000000] hash-mmu: base_shift=20: shift=20, sllp=0x0130, avpnm=0x00000000, tlbiel=0, penc=2
[ 0.000000] hash-mmu: base_shift=24: shift=24, sllp=0x0100, avpnm=0x00000001, tlbiel=0, penc=0
[ 0.000000] hash-mmu: base_shift=34: shift=34, sllp=0x0120, avpnm=0x000007ff, tlbiel=0, penc=3
[ 0.000000] Enabling pkeys with max key count 32
[ 0.000000] Activating Kernel Userspace Access Prevention
[ 0.000000] Activating Kernel Userspace Execution Prevention
[ 0.000000] hash-mmu: Page orders: linear mapping = 24, virtual = 16, io = 16, vmemmap = 24
[ 0.000000] hash-mmu: Using 1TB segments
[ 0.000000] hash-mmu: Initializing hash mmu with SLB
[ 0.000000] Linux version 7.1.0-rc3-00004-g3cc4dd04d913 (pmenzel@flughafenberlinbrandenburgwillybrandt.molgen.mpg.de) (gcc (Ubuntu 11.2.0-7ubuntu2) 11.2.0, GNU ld (GNU Binut
ils for Ubuntu) 2.37) #24 SMP PREEMPT Mon May 11 23:54:48 CEST 2026
[ 0.000000] OF: reserved mem: 0x0000000039c00000..0x000000003a7801ff (11776 KiB) map non-reusable ibm,firmware-allocs-memory@39c00000
[ 0.000000] OF: reserved mem: 0x0000008000000000..0x0000008000c401ff (12544 KiB) map non-reusable ibm,firmware-allocs-memory@8000000000
[ 0.000000] OF: reserved mem: 0x0000000030000000..0x00000000302fffff (3072 KiB) map non-reusable ibm,firmware-code@30000000
[ 0.000000] OF: reserved mem: 0x0000000031000000..0x0000000031bfffff (12288 KiB) map non-reusable ibm,firmware-data@31000000
[ 0.000000] OF: reserved mem: 0x0000000030300000..0x0000000030ffffff (13312 KiB) map non-reusable ibm,firmware-heap@30300000
[ 0.000000] OF: reserved mem: 0x0000000031c00000..0x0000000032ddffff (18304 KiB) map non-reusable ibm,firmware-stacks@31c00000
[ 0.000000] OF: reserved mem: 0x000000fffd440000..0x000000fffd6bffff (2560 KiB) map non-reusable ibm,hbrt-code-image@fffd440000
[ 0.000000] OF: reserved mem: 0x000000fffd6c0000..0x000000fffd6fffff (256 KiB) map non-reusable ibm,hbrt-target-image@fffd6c0000
[ 0.000000] OF: reserved mem: 0x000000fffd700000..0x000000fffd7fffff (1024 KiB) map non-reusable ibm,hbrt-vpd-image@fffd700000
[ 0.000000] OF: reserved mem: 0x000000fffd800000..0x000000fffdbfffff (4096 KiB) map non-reusable ibm,homer-image@fffd800000
[ 0.000000] OF: reserved mem: 0x000000fffdc00000..0x000000fffdffffff (4096 KiB) map non-reusable ibm,homer-image@fffdc00000
[ 0.000000] OF: reserved mem: 0x000000ffff800000..0x000000ffffffffff (8192 KiB) map non-reusable ibm,occ-common-area@ffff800000
[ 0.000000] Found initrd at 0xc000000004500000:0xc0000000078b46ac
[ 0.000000] OPAL: Found non-mapped LPC bus on chip 0
[ 0.000000] Hardware name: 8335-GCA POWER8 (raw) 0x4d0200 opal:skiboot-5.4.8-5787ad3 PowerNV
[ 0.000000] printk: legacy bootconsole [udbg0] enabled
[ 0.000000] CPU maps initialized for 8 threads per core
[ 0.000000] (thread shift is 3)
[ 0.000000] Allocated 5760 bytes for 160 pacas
[ 0.000000] -----------------------------------------------------
[ 0.000000] phys_mem_size = 0x10000000000
[ 0.000000] dcache_bsize = 0x80
[ 0.000000] icache_bsize = 0x80
[ 0.000000] cpu_features = 0x000000fb8f5db187
[ 0.000000] possible = 0x003ffbfbcf5fb187
[ 0.000000] always = 0x0000000380008181
[ 0.000000] cpu_user_features = 0xdc0065c2 0xef000000
[ 0.000000] mmu_features = 0x7c006e01
[ 0.000000] possible = 0x00000000fe00fe41
[ 0.000000] always = 0x0000000000000000
[ 0.000000] firmware_features = 0x0000000110000000
[ 0.000000] vmalloc start = 0xc008000000000000
[ 0.000000] IO start = 0xc00a000000000000
[ 0.000000] vmemmap start = 0xc00c000000000000
[ 0.000000] hash-mmu: ppc64_pft_size = 0x0
[ 0.000000] hash-mmu: htab_hash_mask = 0x7fffff
[ 0.000000] -----------------------------------------------------
[ 0.000000] NODE_DATA(0) allocated [mem 0x7fff934780-0x7fff93bfff]
[ 0.000000] NODE_DATA(8) allocated [mem 0xffff07d880-0xffff0850ff]
[ 0.000000] rfi-flush: ori type flush available
[ 0.000000] rfi-flush: patched 13 locations (ori type flush)
[ 0.000000] count-cache-flush: flush disabled.
[ 0.000000] link-stack-flush: software flush enabled.
[ 0.000000] entry-flush: patched 61 locations (no flush)
[ 0.000000] uaccess-flush: patched 1 locations (no flush)
[ 0.000000] stf-barrier: hwsync barrier available
[ 0.000000] stf-barrier: patched 61 entry locations (hwsync barrier)
[ 0.000000] stf-barrier: patched 13 exit locations (hwsync barrier)
[ 0.000000] OPAL nvram setup, 589824 bytes
[ 0.000000] barrier-nospec: using ORI speculation barrier
[ 0.000000] barrier-nospec: patched 298 locations
[ 0.000000] Top of RAM: 0x10000000000, Total RAM: 0x10000000000
[ 0.000000] Memory hole size: 0MB
[ 0.000000] Zone ranges:
[ 0.000000] Normal [mem 0x0000000000000000-0x000000ffffffffff]
[ 0.000000] Device empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x0000007fffffffff]
[ 0.000000] node 8: [mem 0x0000008000000000-0x000000ffffffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000007fffffffff]
[ 0.000000] Initmem setup node 8 [mem 0x0000008000000000-0x000000ffffffffff]
[ 0.000000] percpu: Embedded 3 pages/cpu s126744 r0 d69864 u262144
[ 0.000000] pcpu-alloc: s126744 r0 d69864 u262144 alloc=1*1048576
[ 0.000000] pcpu-alloc: [0] 000 001 002 003 [0] 004 005 006 007
[ 0.000000] pcpu-alloc: [0] 008 009 010 011 [0] 012 013 014 015
[ 0.000000] pcpu-alloc: [0] 016 017 018 019 [0] 020 021 022 023
[ 0.000000] pcpu-alloc: [0] 024 025 026 027 [0] 028 029 030 031
[ 0.000000] pcpu-alloc: [0] 032 033 034 035 [0] 036 037 038 039
[ 0.000000] pcpu-alloc: [0] 040 041 042 043 [0] 044 045 046 047
[ 0.000000] pcpu-alloc: [0] 048 049 050 051 [0] 052 053 054 055
[ 0.000000] pcpu-alloc: [0] 056 057 058 059 [0] 060 061 062 063
[ 0.000000] pcpu-alloc: [0] 064 065 066 067 [0] 068 069 070 071
[ 0.000000] pcpu-alloc: [0] 072 073 074 075 [0] 076 077 078 079
[ 0.000000] pcpu-alloc: [1] 080 081 082 083 [1] 084 085 086 087
[ 0.000000] pcpu-alloc: [1] 088 089 090 091 [1] 092 093 094 095
[ 0.000000] pcpu-alloc: [1] 096 097 098 099 [1] 100 101 102 103
[ 0.000000] pcpu-alloc: [1] 104 105 106 107 [1] 108 109 110 111
[ 0.000000] pcpu-alloc: [1] 112 113 114 115 [1] 116 117 118 119
[ 0.000000] pcpu-alloc: [1] 120 121 122 123 [1] 124 125 126 127
[ 0.000000] pcpu-alloc: [1] 128 129 130 131 [1] 132 133 134 135
[ 0.000000] pcpu-alloc: [1] 136 137 138 139 [1] 140 141 142 143
[ 0.000000] pcpu-alloc: [1] 144 145 146 147 [1] 148 149 150 151
[ 0.000000] pcpu-alloc: [1] 152 153 154 155 [1] 156 157 158 159
[ 0.000000] Kernel command line: root=UUID=2c3dd738-785a-469b-843e-9f0ba8b47b0d ro rootflags=subvol=@ debug dyndbg="file drivers/usb/* +p"
[ 0.000000] printk: log_buf_len individual max cpu contribution: 4096 bytes
[ 0.000000] printk: log_buf_len total cpu_extra contributions: 651264 bytes
[ 0.000000] printk: log_buf_len min size: 131072 bytes
[ 0.000000] printk: log buffer data + meta data: 1048576 + 4456448 = 5505024 bytes
[ 0.000000] printk: early log buf free: 123848(94%)
[ 0.000000] kvm_cma_reserve: reserving 52428 MiB for global area
[ 0.000000] cma: Reserved 52428 MiB at 0x0000000100000000
[ 0.000000] Fallback order for Node 0: 0 8
[ 0.000000] Fallback order for Node 8: 8 0
[ 0.000000] Built 2 zonelists, mobility grouping on. Total pages: 16777216
[ 0.000000] Policy zone: Normal
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] stackdepot: allocating hash table via alloc_large_system_hash
[ 0.000000] stackdepot hash table entries: 1048576 (order: 8, 16777216 bytes, linear)
[ 0.000000] stackdepot: allocating space for 8191 stack pools via memblock
[ 0.000000] SLUB: HWalign=128, Order=0-3, MinObjects=0, CPUs=160, Nodes=9
[ 0.000000] ftrace: allocating 51243 entries in 13 pages
[ 0.000000] ftrace: allocated 13 pages with 3 groups
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=2048 to nr_cpu_ids=160.
[ 0.000000] Trampoline variant of Tasks RCU enabled.
[ 0.000000] Rude variant of Tasks RCU enabled.
[ 0.000000] Tracing variant of Tasks RCU enabled.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=160
[ 0.000000] RCU Tasks: Setting shift to 8 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=160.
[ 0.000000] RCU Tasks Rude: Setting shift to 8 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=160.
[ 0.000000] NR_IRQS: 512, nr_irqs: 512, preallocated irqs: 16
[ 0.000000] ICS OPAL backend registered
[ 0.000000] rcu: srcu_init: Setting srcu_struct sizes to big.
[ 0.000000] time_init: decrementer frequency = 512.000000 MHz
[ 0.000000] time_init: processor frequency = 2926.000000 MHz
[ 0.000001] clocksource: timebase: mask: 0xffffffffffffffff max_cycles: 0x761537d007, max_idle_ns: 440795202126 ns
[ 0.003491] clocksource: timebase mult[1f40000] shift[24] registered
[ 0.008809] clockevent: decrementer mult[83126e98] shift[32] cpu[0]
[ 0.015631] Console: colour dummy device 80x25
[ 0.017004] printk: legacy console [hvc0] enabled
[ 0.017004] printk: legacy console [hvc0] enabled
[ 0.021370] printk: legacy bootconsole [udbg0] disabled
[ 0.021370] printk: legacy bootconsole [udbg0] disabled
[ 0.038285] mempolicy: Enabling automatic NUMA balancing. Configure with numa_balancing= or the kernel.numa_balancing sysctl
[ 0.038504] pid_max: default: 163840 minimum: 1280
[ 0.164384] Yama: becoming mindful.
[ 0.164589] SELinux: Initializing.
[ 0.220509] TOMOYO Linux initialized
[ 0.254463] Dentry cache hash table entries: 33554432 (order: 12, 268435456 bytes, vmalloc)
[ 0.267078] Inode-cache hash table entries: 16777216 (order: 11, 134217728 bytes, vmalloc)
[ 0.273921] Mount-cache hash table entries: 524288 (order: 6, 4194304 bytes, vmalloc)
[ 0.274529] Mountpoint-cache hash table entries: 524288 (order: 6, 4194304 bytes, vmalloc)
[ 0.281139] VFS: Finished mounting rootfs on nullfs
[ 0.326152] POWER8 performance monitor hardware support registered
[ 0.326910] rcu: Hierarchical SRCU implementation.
[ 0.326965] rcu: Max phase no-delay instances is 1000.
[ 0.327402] Timer migration: 4 hierarchy levels; 8 children per group; 3 crossnode level
[ 0.342095] smp: Bringing up secondary CPUs ...
[ 0.696127] smp: Brought up 2 nodes, 160 CPUs
[ 0.696378] numa: Node 0 CPUs: 0-79
[ 0.696577] numa: Node 8 CPUs: 80-159
[ 0.739633] Memory: 1017120960K/1073741824K available (22080K kernel code, 3392K rwdata, 10688K rodata, 8768K init, 4181K bss, 2361920K reserved, 53690368K cma-reserved)
[ 0.775343] devtmpfs: initialized
[ 1.118274] Initializing IODA2 PHB (/pciex@3fffe40000000)
[ 1.118564] PCI host bridge /pciex@3fffe40000000 (primary) ranges:
[ 1.118806] MEM 0x00003fe000000000..0x00003fe07ffeffff -> 0x0000000080000000
[ 1.119430] MEM 0x0000200000000000..0x000020ffffffffff -> 0x0000200000000000 (M64 #0..15)
[ 1.119548] Using M64 #15 as default window
[ 1.119740] 256 (255) PE's M32: 0x80000000 [segment=0x800000]
[ 1.119927] M64: 0x10000000000 [segment=0x100000000]
[ 1.119967] Allocated bitmap for 2040 MSIs (base IRQ 0x800)
[ 1.121788] Initializing IODA2 PHB (/pciex@3fffe40100000)
[ 1.121969] PCI host bridge /pciex@3fffe40100000 ranges:
[ 1.122164] MEM 0x00003fe080000000..0x00003fe0fffeffff -> 0x0000000080000000
[ 1.122611] MEM 0x0000210000000000..0x000021ffffffffff -> 0x0000210000000000 (M64 #0..15)
[ 1.122651] Using M64 #15 as default window
[ 1.122723] 256 (255) PE's M32: 0x80000000 [segment=0x800000]
[ 1.122757] M64: 0x10000000000 [segment=0x100000000]
[ 1.122802] Allocated bitmap for 2040 MSIs (base IRQ 0x1000)
[ 1.124618] Initializing IODA2 PHB (/pciex@3fffe41000000)
[ 1.124886] PCI host bridge /pciex@3fffe41000000 ranges:
[ 1.124929] MEM 0x00003fe800000000..0x00003fe87ffeffff -> 0x0000000080000000
[ 1.125375] MEM 0x0000240000000000..0x000024ffffffffff -> 0x0000240000000000 (M64 #0..15)
[ 1.125453] Using M64 #15 as default window
[ 1.125676] 256 (255) PE's M32: 0x80000000 [segment=0x800000]
[ 1.125710] M64: 0x10000000000 [segment=0x100000000]
[ 1.125748] Allocated bitmap for 2040 MSIs (base IRQ 0x10800)
[ 1.127651] Initializing IODA2 PHB (/pciex@3fffe41100000)
[ 1.127977] PCI host bridge /pciex@3fffe41100000 ranges:
[ 1.128173] MEM 0x00003fe880000000..0x00003fe8fffeffff -> 0x0000000080000000
[ 1.128801] MEM 0x0000250000000000..0x000025ffffffffff -> 0x0000250000000000 (M64 #0..15)
[ 1.128920] Using M64 #15 as default window
[ 1.129102] 256 (255) PE's M32: 0x80000000 [segment=0x800000]
[ 1.129286] M64: 0x10000000000 [segment=0x100000000]
[ 1.129324] Allocated bitmap for 2040 MSIs (base IRQ 0x11000)
[ 1.131385] Initializing IODA2 PHB (/pciex@3fffe41200000)
[ 1.131519] PCI host bridge /pciex@3fffe41200000 ranges:
[ 1.131715] MEM 0x00003fe900000000..0x00003fe97ffeffff -> 0x0000000080000000
[ 1.132159] MEM 0x0000260000000000..0x000026ffffffffff -> 0x0000260000000000 (M64 #0..15)
[ 1.132199] Using M64 #15 as default window
[ 1.132288] 256 (255) PE's M32: 0x80000000 [segment=0x800000]
[ 1.132475] M64: 0x10000000000 [segment=0x100000000]
[ 1.132513] Allocated bitmap for 2040 MSIs (base IRQ 0x11800)
[ 1.136944] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 1.137280] posixtimers hash table entries: 131072 (order: 5, 2097152 bytes, vmalloc)
[ 1.141234] futex hash table entries: 32768 (4194304 bytes on 2 NUMA nodes, total 8192 KiB, linear).
[ 1.211915] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[ 1.213962] audit: initializing netlink subsys (disabled)
[ 1.214353] audit: type=2000 audit(1778566019.192:1): state=initialized audit_enabled=0 res=1
[ 1.217966] thermal_sys: Registered thermal governor 'fair_share'
[ 1.217976] thermal_sys: Registered thermal governor 'bang_bang'
[ 1.218126] thermal_sys: Registered thermal governor 'step_wise'
[ 1.218233] thermal_sys: Registered thermal governor 'user_space'
[ 1.218436] cpuidle: using governor ladder
[ 1.218713] cpuidle: using governor menu
[ 1.220227] pstore: Using crash dump compression: deflate
[ 1.220295] pstore: Registered nvram as persistent store backend
[ 1.224911] EEH: PowerNV platform initialized
[ 1.413432] kprobes: kprobe jump-optimization is enabled. All kprobes are optimized if possible.
[ 1.429436] HugeTLB: registered 16.0 MiB page size, pre-allocated 0 apges
[ [ 1.429961] HugeTLB: 0 KiB vmemmap can be freed for a 16.0 GiB [ 1.454285] iommu: Default domain type: Translated
[ 1.454428] iommu: DMA [ 1.473059] SCSI subsystem initialized
[ 1.473435] libata version 3.00 loade[ 1.473667] usbcore: registered new interface driver usbfs
[ 1] usbcore: registered new interface driver hub
[ 1.474069] usbcore: registered new device driver usb
[ 1.474233] pps_core: LinuxPPS API ver. 1 registered
[ 1.474287] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 1.474314] PTP clock support registered
[ 1.475096] EDAC MC: Ver: 3.0.0
[ 1.477117] NetLabel: Initializing
[ 1.477134] NetLabel: domain hash size = 128
[ 1.477146] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO
[ 1.477364] NetLabel: unlabeled traffic allowed by default
[ 1.477571] PCI: Probing PCI hardware
[ 1.477820] PCI host bridge to bus 0000:00
[ 1.477919] pci_bus 0000:00: root bus resource [mem 0x3fe000000000-0x3fe07ffeffff] (bus address [0x80000000-0xfffeffff])
[ 1.477943] pci_bus 0000:00: root bus resource [mem 0x200000000000-0x20fdffffffff 64bit pref]
[ 1.477965] pci_bus 0000:00: root bus resource [bus 00-ff]
[ 1.477979] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to ff
[ 1.478046] pci 0000:00:00.0: [1014:03dc] type 01 class 0x060400 PCIe Root Port
[ 1.478103] pci 0000:00:00.0: PCI bridge to [bus 01-ff]
[ 1.478374] pci 0000:00:00.0: PME# supported from D0 D3hot D3cold
[ 1.481241] pci 0000:00:00.0: PCI bridge to [bus 01-ff]
[ 1.481408] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to ff
[ 1.481781] PCI host bridge to bus 0001:00
[ 1.481810] pci_bus 0001:00: root bus resource [mem 0x3fe080000000-0x3fe0fffeffff] (bus address [0x80000000-0xfffeffff])
[ 1.481833] pci_bus 0001:00: root bus resource [mem 0x210000000000-0x21fdffffffff 64bit pref]
[ 1.481854] pci_bus 0001:00: root bus resource [bus 00-ff]
[ 1.481866] pci_bus 0001:00: busn_res: [bus 00-ff] end is updated to ff
[ 1.482055] pci 0001:00:00.0: [1014:03dc] type 01 class 0x060400 PCIe Root Port
[ 1.482111] pci 0001:00:00.0: PCI bridge to [bus 01]
[ 1.482136] pci 0001:00:00.0: bridge window [mem 0x3fe080000000-0x3fe0807fffff]
[ 1.482294] pci 0001:00:00.0: bridge window [mem 0x210000000000-0x2100ffffffff 64bit pref]
[ 1.482544] pci 0001:00:00.0: PME# supported from D0 D3hot D3cold
[ 1.484548] pci 0001:01:00.0: [14e4:168a] type 00 class 0x020000 PCIe Endpoint
[ 1.484636] pci 0001:01:00.0: BAR 0 [mem 0x210000000000-0x2100007fffff 64bit pref]
[ 1.484658] pci 0001:01:00.0: BAR 2 [mem 0x210000800000-0x210000ffffff 64bit pref]
[ 1.484680] pci 0001:01:00.0: BAR 4 [mem 0x210004000000-0x21000400ffff 64bit pref]
[ 1.484700] pci 0001:01:00.0: ROM [mem 0x00000000-0x0003ffff pref]
[ 1.484921] pci 0001:01:00.0: PME# supported from D0 D3hot D3cold
[ 1.496189] pci 0001:01:00.1: [14e4:168a] type 00 class 0x020000 PCIe Endpoint
[ 1.496278] pci 0001:01:00.1: BAR 0 [mem 0x210001000000-0x2100017fffff 64bit pref]
[ 1.496300] pci 0001:01:00.1: BAR 2 [mem 0x210001800000-0x210001ffffff 64bit pref]
[ 1.496322] pci 0001:01:00.1: BAR 4 [mem 0x210004010000-0x21000401ffff 64bit pref]
[ 1.496341] pci 0001:01:00.1: ROM [mem 0x00000000-0x0003ffff pref]
[ 1.496557] pci 0001:01:00.1: PME# supported from D0 D3hot D3cold
[ 1.508234] pci 0001:01:00.2: [14e4:168a] type 00 class 0x020000 PCIe Endpoint
[ 1.508323] pci 0001:01:00.2: BAR 0 [mem 0x210002000000-0x2100027fffff 64bit pref]
[ 1.508479] pci 0001:01:00.2: BAR 2 [mem 0x210002800000-0x210002ffffff 64bit pref]
[ 1.508501] pci 0001:01:00.2: BAR 4 [mem 0x210004020000-0x21000402ffff 64bit pref]
[ 1.508522] pci 0001:01:00.2: ROM [mem 0x00000000-0x0003ffff pref]
[ 1.508736] pci 0001:01:00.2: PME# supported from D0 D3hot D3cold
[ 1.520387] pci 0001:01:00.3: [14e4:168a] type 00 class 0x020000 PCIe Endpoint
[ 1.520477] pci 0001:01:00.3: BAR 0 [mem 0x210003000000-0x2100037fffff 64bit pref]
[ 1.520499] pci 0001:01:00.3: BAR 2 [mem 0x210003800000-0x210003ffffff 64bit pref]
[ 1.520521] pci 0001:01:00.3: BAR 4 [mem 0x210004030000-0x21000403ffff 64bit pref]
[ 1.520541] pci 0001:01:00.3: ROM [mem 0x00000000-0x0003ffff pref]
[ 1.520756] pci 0001:01:00.3: PME# supported from D0 D3hot D3cold
[ 1.539898] pci 0001:01:00.0: ASPM: default states L0s
[ 1.540016] pci 0001:00:00.0: PCI bridge to [bus 01]
[ 1.540058] pci_bus 0001:00: busn_res: [bus 00-ff] end is updated to 01
[ 1.540223] PCI host bridge to bus 0020:00
[ 1.540235] pci_bus 0020:00: root bus resource [mem 0x3fe800000000-0x3fe87ffeffff] (bus address [0x80000000-0xfffeffff])
[ 1.540258] pci_bus 0020:00: root bus resource [mem 0x240000000000-0x24fdffffffff 64bit pref]
[ 1.540280] pci_bus 0020:00: root bus resource [bus 00-ff]
[ 1.540293] pci_bus 0020:00: busn_res: [bus 00-ff] end is updated to ff
[ 1.540353] pci 0020:00:00.0: [1014:03dc] type 01 class 0x060400 PCIe Root Port
[ 1.540417] pci 0020:00:00.0: PCI bridge to [bus 01-ff]
[ 1.540561] pci 0020:00:00.0: PME# supported from D0 D3hot D3cold
[ 1.542392] pci 0020:00:00.0: PCI bridge to [bus 01-ff]
[ 1.542437] pci_bus 0020:00: busn_res: [bus 00-ff] end is updated to ff
[ 1.546295] PCI host bridge to bus 0021:00
[ 1.546308] pci_bus 0021:00: root bus resource [mem 0x3fe880000000-0x3fe8fffeffff] (bus address [0x80000000-0xfffeffff])
[ 1.546330] pci_bus 0021:00: root bus resource [mem 0x250000000000-0x25fdffffffff 64bit pref]
[ 1.546351] pci_bus 0021:00: root bus resource [bus 00-ff]
[ 1.546364] pci_bus 0021:00: busn_res: [bus 00-ff] end is updated to ff
[ 1.546425] pci 0021:00:00.0: [1014:03dc] type 01 class 0x060400 PCIe Root Port
[ 1.546481] pci 0021:00:00.0: PCI bridge to [bus 01-15]
[ 1.546507] pci 0021:00:00.0: bridge window [mem 0x3fe880000000-0x3fe8837fffff]
[ 1.546541] pci 0021:00:00.0: bridge window [mem 0x250000000000-0x2500ffffffff 64bit pref]
[ 1.546656] pci 0021:00:00.0: PME# supported from D0 D3hot D3cold
[ 1.548565] pci 0021:01:00.0: [10b5:8725] type 01 class 0x060400 PCIe Switch Upstream Port
[ 1.548623] pci 0021:01:00.0: BAR 0 [mem 0x3fe883000000-0x3fe88303ffff]
[ 1.548646] pci 0021:01:00.0: PCI bridge to [bus 02-15]
[ 1.548673] pci 0021:01:00.0: bridge window [mem 0x3fe880000000-0x3fe882ffffff]
[ 1.548708] pci 0021:01:00.0: bridge window [mem 0x250000000000-0x2500ffffffff 64bit pref]
[ 1.548953] pci 0021:01:00.0: PME# supported from D0 D3hot D3cold
[ 1.549367] pci 0021:01:00.1: [10b5:87d0] type 00 class 0x088000 PCIe Endpoint
[ 1.549451] pci 0021:01:00.1: BAR 0 [mem 0x3fe883040000-0x3fe883041fff]
[ 1.549491] pci 0021:01:00.1: enabling Extended Tags
[ 1.549543] pci 0021:01:00.1: BAR 0 [mem size 0x00002000]: requesting alignment to 0x10000
[ 1.549917] pci 0021:01:00.2: [10b5:87d0] type 00 class 0x088000 PCIe Endpoint
[ 1.550001] pci 0021:01:00.2: BAR 0 [mem 0x3fe883042000-0x3fe883043fff]
[ 1.550041] pci 0021:01:00.2: enabling Extended Tags
[ 1.550093] pci 0021:01:00.2: BAR 0 [mem size 0x00002000]: requesting alignment to 0x10000
[ 1.550479] pci 0021:01:00.3: [10b5:87d0] type 00 class 0x088000 PCIe Endpoint
[ 1.550567] pci 0021:01:00.3: BAR 0 [mem 0x3fe883044000-0x3fe883045fff]
[ 1.550607] pci 0021:01:00.3: enabling Extended Tags
[ 1.550660] pci 0021:01:00.3: BAR 0 [mem size 0x00002000]: requesting alignment to 0x10000
[ 1.551044] pci 0021:01:00.4: [10b5:87d0] type 00 class 0x088000 PCIe Endpoint
[ 1.551130] pci 0021:01:00.4: BAR 0 [mem 0x3fe883046000-0x3fe883047fff]
[ 1.551171] pci 0021:01:00.4: enabling Extended Tags
[ 1.551224] pci 0021:01:00.4: BAR 0 [mem size 0x00002000]: requesting alignment to 0x10000
[ 1.551579] pci 0021:00:00.0: PCI bridge to [bus 01-15]
[ 1.551855] pci 0021:02:01.0: [10b5:8725] type 01 class 0x060400 PCIe Switch Downstream Port
[ 1.551928] pci 0021:02:01.0: PCI bridge to [bus 03-07]
[ 1.551956] pci 0021:02:01.0: bridge window [mem 0x3fe880000000-0x3fe8807fffff]
[ 1.551991] pci 0021:02:01.0: bridge window [mem 0x250000000000-0x2500ffffffff 64bit pref]
[ 1.552253] pci 0021:02:01.0: PME# supported from D0 D3hot D3cold
[ 1.552968] pci 0021:02:08.0: [10b5:8725] type 01 class 0x060400 PCIe Switch Downstream Port
[ 1.560126] pci 0021:02:08.0: PCI bridge to [bus 08-0c]
[ 1.560417] pci 0021:02:08.0: PME# supported from D0 D3hot D3cold
[ 1.561158] pci 0021:02:09.0: [10b5:8725] type 01 class 0x060400 PCIe Switch Downstream Port
[ 1.561815] pci 0021:02:09.0: PCI bridge to [bus 0d]
[ 1.562299] pci 0021:02:09.0: bridge window [mem 0x3fe880800000-0x3fe880ffffff]
[ 1.563134] pci 0021:02:09.0: PME# supported from D0 D3hot D3cold
[ 1.588467] pci 0021:02:0a.0: [10b5:8725] type 01 class 0x060400 PCIe Switch Downstream Port
[ 1.589016] pci 0021:02:0a.0: PCI bridge to [bus 0e]
[ 1.589503] pci 0021:02:0a.0: bridge window [mem 0x3fe881000000-0x3fe8817fffff]
[ 1.590290] pci 0021:02:0a.0: PME# supported from D0 D3hot D3cold
[ 1.591118] pci 0021:02:0b.0: [10b5:8725] type 01 class 0x060400 PCIe Switch Downstream Port
[ 1.591673] pci 0021:02:0b.0: PCI bridge to [bus 0f-10]
[ 1.591702] pci 0021:02:0b.0: bridge window [mem 0x3fe881800000-0x3fe882ffffff]
[ 1.592923] pci 0021:02:0b.0: PME# supported from D0 D3hot D3cold
[ 1.613140] pci 0021:02:0c.0: [10b5:8725] type 01 class 0x060400 PCIe Switch Downstream Port
[ 1.629394] pci 0021:02:0c.0: PCI bridge to [bus 11-15]
[ 1.630229] pci 0021:02:0c.0: PME# supported from D0 D3hot D3cold
[ 1.632512] pci 0021:01:00.0: PCI bridge to [bus 02-15]
[ 1.632719] pci 0021:02:01.0: PCI bridge to [bus 03-07]
[ 1.632920] pci 0021:02:08.0: PCI bridge to [bus 08-0c]
[ 1.638010] pci 0021:0d:00.0: [104c:8241] type 00 class 0x0c0330 PCIe Endpoint
[ 1.638479] pci 0021:0d:00.0: BAR 0 [mem 0x3fe880800000-0x3fe88080ffff 64bit]
[ 1.639419] pci 0021:0d:00.0: BAR 2 [mem 0x3fe880810000-0x3fe880811fff 64bit]
[ 1.640652] pci 0021:0d:00.0: BAR 2 [mem size 0x00002000 64bit]: requesting alignment to 0x10000
[ 1.641822] pci 0021:0d:00.0: supports D1 D2
[ 1.642329] pci 0021:0d:00.0: PME# supported from D0 D1 D2 D3hot
[ 1.649805] pci 0021:0d:00.0: ASPM: default states L1
[ 1.649862] pci 0021:02:09.0: PCI bridge to [bus 0d]
[ 1.650261] pci 0021:0e:00.0: [1b4b:9235] type 00 class 0x010601 PCIe Legacy Endpoint
[ 1.650364] pci 0021:0e:00.0: BAR 0 [io 0x8000-0x8007]
[ 1.650381] pci 0021:0e:00.0: BAR 1 [io 0x8040-0x8043]
[ 1.650671] pci 0021:0e:00.0: BAR 2 [io 0x8100-0x8107]
[ 1.651222] pci 0021:0e:00.0: BAR 3 [io 0x8140-0x8143]
[ 1.651750] pci 0021:0e:00.0: BAR 4 [io 0x800000-0x80001f]
[ 1.652274] pci 0021:0e:00.0: BAR 5 [mem 0x3fe881010000-0x3fe8810107ff]
[ 1.652867] pci 0021:0e:00.0: ROM [mem 0x3fe8d0000000-0x3fe8d000ffff pref]
[ 1.676961] pci 0021:0e:00.0: Enabling fixed DMA alias to 00.1
[ 1.677419] pci 0021:0e:00.0: BAR 5 [mem size 0x00000800]: requesting alignment to 0x10000
[ 1.678049] pci 0021:0e:00.0: PME# supported from D3hot
[ 1.684944] pci 0021:0e:00.0: ASPM: default states L1
[ 1.684972] pci 0021:02:0a.0: PCI bridge to [bus 0e]
[ 1.685217] pci 0021:0f:00.0: [1a03:1150] type 01 class 0x060400 PCIe to PCI/PCI-X bridge
[ 1.685299] pci 0021:0f:00.0: PCI bridge to [bus 10]
[ 1.685334] pci 0021:0f:00.0: bridge window [mem 0x3fe881800000-0x3fe882ffffff]
[ 1.685412] pci 0021:0f:00.0: enabling Extended Tags
[ 1.685605] pci 0021:0f:00.0: supports D1 D2
[ 1.685618] pci 0021:0f:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[ 1.685910] pci 0021:0f:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force'
[ 1.689075] pci 0021:02:0b.0: PCI bridge to [bus 0f-10]
[ 1.698486] pci_bus 0021:10: extended config space not accessible
[ 1.708296] pci 0021:10:00.0: [1a03:2000] type 00 class 0x030000 conventional PCI endpoint
[ 1.709359] pci 0021:10:00.0: BAR 0 [mem 0x3fe882000000-0x3fe882ffffff]
[ 1.709796] pci 0021:10:00.0: BAR 1 [mem 0x3fe881800000-0x3fe88181ffff]
[ 1.710360] pci 0021:10:00.0: BAR 2 [io 0x0000-0x007f]
[ 1.710942] pci 0021:10:00.0: supports D1 D2
[ 1.710954] pci 0021:10:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[ 1.713641] pci 0021:0f:00.0: PCI bridge to [bus 10]
[ 1.713871] pci 0021:02:0c.0: PCI bridge to [bus 11-15]
[ 1.713991] pci_bus 0021:00: busn_res: [bus 00-ff] end is updated to 15
[ 1.728088] PCI host bridge to bus 0022:00
[ 1.728101] pci_bus 0022:00: root bus resource [mem 0x3fe900000000-0x3fe97ffeffff] (bus address [0x80000000-0xfffeffff])
[ 1.729596] pci_bus 0022:00: root bus resource [mem 0x260000000000-0x26fdffffffff 64bit pref]
[ 1.730796] pci_bus 0022:00: root bus resource [bus 00-ff]
[ 1.731862] pci_bus 0022:00: busn_res: [bus 00-ff] end is updated to ff
[ 1.732574] pci 0022:00:00.0: [1014:03dc] type 01 class 0x060400 PCIe Root Port
[ 1.747368] pci 0022:00:00.0: PCI bridge to [bus 01-ff]
[ 1.748074] pci 0022:00:00.0: PME# supported from D0 D3hot D3cold
[ 1.750379] pci 0022:00:00.0: PCI bridge to [bus 01-ff]
[ 1.759156] pci_bus 0022:00: busn_res: [bus 00-ff] end is updated to ff
[ 1.759638] pci 0000:00:00.0: disabling bridge window [io 0x0000-0xffffffffffffffff] to [bus 01-ff] (unused)
[ 1.760640] pci 0000:00:00.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff 64bit pref] to [bus 01-ff] (unused)
[ 1.761651] pci 0000:00:00.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff] to [bus 01-ff] (unused)
[ 1.762688] pci 0000:00:00.0: PCI bridge to [bus 01-ff]
[ 1.781323] pci_bus 0000:00: resource 4 [mem 0x3fe000000000-0x3fe07ffeffff]
[ 1.781766] pci_bus 0000:00: resource 5 [mem 0x200000000000-0x20fdffffffff 64bit pref]
[ 1.782327] pci_bus 0000:01: resource 0 [io 0x0000-0xffffffffffffffff disabled]
[ 1.788685] pci_bus 0000:01: resource 1 [mem 0x00000000-0xffffffffffffffff disabled]
[ 1.789667] pci_bus 0000:01: resource 2 [mem 0x00000000-0xffffffffffffffff 64bit pref disabled]
[ 1.790173] pci 0001:00:00.0: disabling bridge window [io 0x0000-0xffffffffffffffff] to [bus 01] (unused)
[ 1.791223] pci 0001:00:00.0: bridge window [mem 0x00800000-0x007fffff] to [bus 01] add_size 800000 add_align 800000
[ 1.792273] pci 0001:00:00.0: bridge window [mem 0x210000000000-0x2100ffffffff 64bit pref]: assigned
[ 1.792876] pci 0001:00:00.0: bridge window [mem 0x3fe080000000-0x3fe0807fffff]: assigned
[ 1.808046] pci 0001:01:00.0: BAR 0 [mem 0x210000000000-0x2100007fffff 64bit pref]: assigned
[ 1.808543] pci 0001:01:00.0: BAR 2 [mem 0x210000800000-0x210000ffffff 64bit pref]: assigned
[ 1.809568] pci 0001:01:00.1: BAR 0 [mem 0x210001000000-0x2100017fffff 64bit pref]: assigned
[ 1.810100] pci 0001:01:00.1: BAR 2 [mem 0x210001800000-0x210001ffffff 64bit pref]: assigned
[ 1.811100] pci 0001:01:00.2: BAR 0 [mem 0x210002000000-0x2100027fffff 64bit pref]: assigned
[ 1.811660] pci 0001:01:00.2: BAR 2 [mem 0x210002800000-0x210002ffffff 64bit pref]: assigned
[ 1.812666] pci 0001:01:00.3: BAR 0 [mem 0x210003000000-0x2100037fffff 64bit pref]: assigned
[ 1.839149] pci 0001:01:00.3: BAR 2 [mem 0x210003800000-0x210003ffffff 64bit pref]: assigned
[ 1.840940] pci 0001:01:00.0: ROM [mem 0x3fe080000000-0x3fe08003ffff pref]: assigned
[ 1.841441] pci 0001:01:00.1: ROM [mem 0x3fe080040000-0x3fe08007ffff pref]: assigned
[ 1.841969] pci 0001:01:00.2: ROM [mem 0x3fe080080000-0x3fe0800bffff pref]: assigned
[ 1.856089] pci 0001:01:00.3: ROM [mem 0x3fe0800c0000-0x3fe0800fffff pref]: assigned
[ 1.856603] pci 0001:01:00.0: BAR 4 [mem 0x210004000000-0x21000400ffff 64bit pref]: assigned
[ 1.857181] pci 0001:01:00.1: BAR 4 [mem 0x210004010000-0x21000401ffff 64bit pref]: assigned
[ 1.858197] pci 0001:01:00.2: BAR 4 [mem 0x210004020000-0x21000402ffff 64bit pref]: assigned
[ 1.858715] pci 0001:01:00.3: BAR 4 [mem 0x210004030000-0x21000403ffff 64bit pref]: assigned
[ 1.859765] pci 0001:00:00.0: PCI bridge to [bus 01]
[ 1.860260] pci 0001:00:00.0: bridge window [mem 0x3fe080000000-0x3fe0ffefffff]
[ 1.860769] pci 0001:00:00.0: bridge window [mem 0x210000000000-0x21fdfff0ffff 64bit pref]
[ 1.861819] pci_bus 0001:00: resource 4 [mem 0x3fe080000000-0x3fe0fffeffff]
[ 1.862318] pci_bus 0001:00: resource 5 [mem 0x210000000000-0x21fdffffffff 64bit pref]
[ 1.862894] pci_bus 0001:01: resource 0 [io 0x0000-0xffffffffffffffff disabled]
[ 1.869212] pci_bus 0001:01: resource 1 [mem 0x3fe080000000-0x3fe0ffefffff]
[ 1.870223] pci_bus 0001:01: resource 2 [mem 0x210000000000-0x21fdfff0ffff 64bit pref]
[ 1.870746] pci 0020:00:00.0: disabling bridge window [io 0x0000-0xffffffffffffffff] to [bus 01-ff] (unused)
[ 1.871781] pci 0020:00:00.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff 64bit pref] to [bus 01-ff] (unused)
[ 1.872829] pci 0020:00:00.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff] to [bus 01-ff] (unused)
[ 1.897860] pci 0020:00:00.0: PCI bridge to [bus 01-ff]
[ 1.897887] pci_bus 0020:00: resource 4 [mem 0x3fe800000000-0x3fe87ffeffff]
[ 1.898881] pci_bus 0020:00: resource 5 [mem 0x240000000000-0x24fdffffffff 64bit pref]
[ 1.899395] pci_bus 0020:01: resource 0 [io 0x0000-0xffffffffffffffff disabled]
[ 1.899919] pci_bus 0020:01: resource 1 [mem 0x00000000-0xffffffffffffffff disabled]
[ 1.900970] pci_bus 0020:01: resource 2 [mem 0x00000000-0xffffffffffffffff 64bit pref disabled]
[ 1.901510] pci 0021:02:01.0: bridge window [io 0x1000-0x0fff] to [bus 03-07] add_size 1000
[ 1.902565] pci 0021:02:01.0: bridge window [mem 0x100000000-0xffffffff 64bit pref] to [bus 03-07] add_size 100000000 add_align 100000000
[ 1.907250] pci 0021:02:01.0: bridge window [mem 0x00800000-0x007fffff] to [bus 03-07] add_size 800000 add_align 800000
[ 1.908276] pci 0021:02:08.0: disabling bridge window [io 0x0000-0xffffffffffffffff] to [bus 08-0c] (unused)
[ 1.909313] pci 0021:02:08.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff 64bit pref] to [bus 08-0c] (unused)
[ 1.910401] pci 0021:02:08.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff] to [bus 08-0c] (unused)
[ 1.910871] pci 0021:02:09.0: disabling bridge window [io 0x0000-0xffffffffffffffff] to [bus 0d] (unused)
[ 1.911858] pci 0021:02:09.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff 64bit pref] to [bus 0d] (unused)
[ 1.934590] pci 0021:02:0a.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff 64bit pref] to [bus 0e] (unused)
[ 1.937715] pci 0021:0f:00.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff 64bit pref] to [bus 10] (unused)
[ 1.938757] pci 0021:02:0b.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff 64bit pref] to [bus 0f-10] (unused)
[ 1.939789] pci 0021:02:0c.0: disabling bridge window [io 0x0000-0xffffffffffffffff] to [bus 11-15] (unused)
[ 1.940307] pci 0021:02:0c.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff 64bit pref] to [bus 11-15] (unused)
[ 1.941336] pci 0021:02:0c.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff] to [bus 11-15] (unused)
[ 1.942392] pci 0021:01:00.0: bridge window [io 0x1000-0x2fff] to [bus 02-15] add_size 1000
[ 1.947244] pci 0021:01:00.0: bridge window [mem 0x100000000-0xffffffff 64bit pref] to [bus 02-15] add_size 100000000 add_align 100000000
[ 1.948305] pci 0021:01:00.0: bridge window [mem 0x00800000-0x02ffffff] to [bus 02-15] add_size 800000 add_align 800000
[ 1.949318] pci 0021:00:00.0: bridge window [io 0x1000-0x2fff] to [bus 01-15] add_size 1000
[ 1.949846] pci 0021:00:00.0: bridge window [mem 0x100000000-0xffffffff 64bit pref] to [bus 01-15] add_size 100000000 add_align 100000000
[ 1.950883] pci 0021:00:00.0: bridge window [mem 0x00800000-0x037fffff] to [bus 01-15] add_size 800000 add_align 800000
[ 1.951979] pci 0021:00:00.0: bridge window [mem 0x250000000000-0x2500ffffffff 64bit pref]: assigned
[ 1.957261] pci 0021:00:00.0: bridge window [mem 0x3fe880000000-0x3fe8837fffff]: assigned
[ 1.957758] pci 0021:00:00.0: bridge window [io size 0x3000]: can't assign; no space
[ 1.958799] pci 0021:00:00.0: bridge window [io size 0x3000]: failed to assign
[ 1.959329] pci 0021:00:00.0: bridge window [io size 0x2000]: can't assign; no space
[ 1.959843] pci 0021:00:00.0: bridge window [io size 0x2000]: failed to assign
[ 1.960880] pci 0021:01:00.0: bridge window [mem 0x250000000000-0x2500ffffffff 64bit pref]: assigned
[ 1.961397] pci 0021:01:00.0: bridge window [mem 0x3fe880000000-0x3fe882ffffff]: assigned
[ 1.962372] pci 0021:01:00.0: BAR 0 [mem 0x3fe883000000-0x3fe88303ffff]: assigned
[ 1.978126] pci 0021:01:00.1: BAR 0 [mem 0x3fe883040000-0x3fe883041fff]: assigned
[ 1.979136] pci 0021:01:00.2: BAR 0 [mem 0x3fe883050000-0x3fe883051fff]: assigned
[ 1.980472] pci 0021:01:00.3: BAR 0 [mem 0x3fe883060000-0x3fe883061fff]: assigned
[ 1.981001] pci 0021:01:00.4: BAR 0 [mem 0x3fe883070000-0x3fe883071fff]: assigned
[ 1.981533] pci 0021:01:00.0: bridge window [io size 0x3000]: can't assign; no space
[ 1.982616] pci 0021:01:00.0: bridge window [io size 0x3000]: failed to assign
[ 2.005393] pci 0021:01:00.0: bridge window [io size 0x2000]: can't assign; no space
[ 2.007959] pci 0021:01:00.0: bridge window [io size 0x2000]: failed to assign
[ 2.008496] pci 0021:02:01.0: bridge window [mem 0x250000000000-0x2500ffffffff 64bit pref]: assigned
[ 2.009509] pci 0021:02:0b.0: bridge window [mem 0x3fe880000000-0x3fe8817fffff]: assigned
[ 2.010536] pci 0021:02:01.0: bridge window [mem 0x3fe881800000-0x3fe881ffffff]: assigned
[ 2.011030] pci 0021:02:09.0: bridge window [mem 0x3fe882000000-0x3fe8827fffff]: assigned
[ 2.011554] pci 0021:02:0a.0: bridge window [mem 0x3fe882800000-0x3fe882ffffff]: assigned
[ 2.012638] pci 0021:02:01.0: bridge window [io size 0x1000]: can't assign; no space
[ 2.017534] pci 0021:02:01.0: bridge window [io size 0x1000]: failed to assign
[ 2.018054] pci 0021:02:0a.0: bridge window [io size 0x1000]: can't assign; no space
[ 2.019073] pci 0021:02:0a.0: bridge window [io size 0x1000]: failed to assign
[ 2.019604] pci 0021:02:0b.0: bridge window [io size 0x1000]: can't assign; no space
[ 2.020640] pci 0021:02:0b.0: bridge window [io size 0x1000]: failed to assign
[ 2.021164] pci 0021:02:0a.0: bridge window [io size 0x1000]: can't assign; no space
[ 2.021700] pci 0021:02:0a.0: bridge window [io size 0x1000]: failed to assign
[ 2.022175] pci 0021:02:0b.0: bridge window [io size 0x1000]: can't assign; no space
[ 2.061650] pci 0021:02:0b.0: bridge window [io size 0x1000]: failed to assign
[ 2.062175] pci 0021:02:01.0: bridge window [io size 0x1000]: can't assign; no space
[ 2.062708] pci 0021:02:01.0: bridge window [io size 0x1000]: failed to assign
[ 2.097873] pci 0021:02:01.0: PCI bridge to [bus 03-07]
[ 2.097892] pci 0021:02:01.0: bridge window [mem 0x3fe881800000-0x3fe881ffffff]
[ 2.098901] pci 0021:02:01.0: bridge window [mem 0x250000000000-0x2500ffffffff 64bit pref]
[ 2.099430] pci 0021:02:08.0: PCI bridge to [bus 08-0c]
[ 2.099961] pci 0021:0d:00.0: BAR 0 [mem 0x3fe882000000-0x3fe88200ffff 64bit]: assigned
[ 2.100998] pci 0021:0d:00.0: BAR 2 [mem 0x3fe882010000-0x3fe882011fff 64bit]: assigned
[ 2.101530] pci 0021:02:09.0: PCI bridge to [bus 0d]
[ 2.102080] pci 0021:02:09.0: bridge window [mem 0x3fe882000000-0x3fe8827fffff]
[ 2.102611] pci 0021:0e:00.0: BAR 5 [mem 0x3fe882800000-0x3fe8828007ff]: assigned
[ 2.107055] pci 0021:0e:00.0: ROM [mem 0x3fe882810000-0x3fe88281ffff pref]: assigned
[ 2.108073] pci 0021:0e:00.0: BAR 4 [io size 0x0020]: can't assign; no space
[ 2.108604] pci 0021:0e:00.0: BAR 4 [io size 0x0020]: failed to assign
[ 2.109130] pci 0021:0e:00.0: BAR 0 [io size 0x0008]: can't assign; no space
[ 2.110175] pci 0021:0e:00.0: BAR 0 [io size 0x0008]: failed to assign
[ 2.110692] pci 0021:0e:00.0: BAR 2 [io size 0x0008]: can't assign; no space
[ 2.111229] pci 0021:0e:00.0: BAR 2 [io size 0x0008]: failed to assign
[ 2.111745] pci 0021:0e:00.0: BAR 1 [io size 0x0004]: can't assign; no space
[ 2.112261] pci 0021:0e:00.0: BAR 1 [io size 0x0004]: failed to assign
[ 2.112837] pci 0021:0e:00.0: BAR 3 [io size 0x0004]: can't assign; no space
[ 2.138526] pci 0021:0e:00.0: BAR 3 [io size 0x0004]: failed to assign
[ 2.139053] pci 0021:0e:00.0: BAR 4 [io size 0x0020]: can't assign; no space
[ 2.139568] pci 0021:0e:00.0: BAR 4 [io size 0x0020]: failed to assign
[ 2.140098] pci 0021:0e:00.0: BAR 0 [io size 0x0008]: can't assign; no space
[ 2.141158] pci 0021:0e:00.0: BAR 0 [io size 0x0008]: failed to assign
[ 2.141719] pci 0021:0e:00.0: BAR 2 [io size 0x0008]: can't assign; no space
[ 2.142224] pci 0021:0e:00.0: BAR 2 [io size 0x0008]: failed to assign
[ 2.142706] pci 0021:0e:00.0: BAR 1 [io size 0x0004]: can't assign; no space
[ 2.147091] pci 0021:0e:00.0: BAR 1 [io size 0x0004]: failed to assign
[ 2.148133] pci 0021:0e:00.0: BAR 3 [io size 0x0004]: can't assign; no space
[ 2.148665] pci 0021:0e:00.0: BAR 3 [io size 0x0004]: failed to assign
[ 2.149198] pci 0021:02:0a.0: PCI bridge to [bus 0e]
[ 2.149726] pci 0021:02:0a.0: bridge window [mem 0x3fe882800000-0x3fe882ffffff]
[ 2.150298] pci 0021:0f:00.0: bridge window [mem 0x3fe880000000-0x3fe8817fffff]: assigned
[ 2.150810] pci 0021:0f:00.0: bridge window [io size 0x1000]: can't assign; no space
[ 2.151857] pci 0021:0f:00.0: bridge window [io size 0x1000]: failed to assign
[ 2.152391] pci 0021:0f:00.0: bridge window [io size 0x1000]: can't assign; no space
[ 2.177104] pci 0021:0f:00.0: bridge window [io size 0x1000]: failed to assign
[ 2.177595] pci 0021:10:00.0: BAR 0 [mem 0x3fe880000000-0x3fe880ffffff]: assigned
[ 2.178139] pci 0021:10:00.0: BAR 1 [mem 0x3fe881000000-0x3fe88101ffff]: assigned
[ 2.178646] pci 0021:10:00.0: BAR 2 [io size 0x0080]: can't assign; no space
[ 2.179650] pci 0021:10:00.0: BAR 2 [io size 0x0080]: failed to assign
[ 2.180168] pci 0021:10:00.0: BAR 2 [io size 0x0080]: can't assign; no space
[ 2.180689] pci 0021:10:00.0: BAR 2 [io size 0x0080]: failed to assign
[ 2.181218] pci 0021:0f:00.0: PCI bridge to [bus 10]
[ 2.181747] pci 0021:0f:00.0: bridge window [mem 0x3fe880000000-0x3fe8817fffff]
[ 2.182706] pci 0021:02:0b.0: PCI bridge to [bus 0f-10]
[ 2.182840] pci 0021:02:0b.0: bridge window [mem 0x3fe880000000-0x3fe8817fffff]
[ 2.188109] pci 0021:02:0c.0: PCI bridge to [bus 11-15]
[ 2.188647] pci 0021:01:00.0: PCI bridge to [bus 02-15]
[ 2.189204] pci 0021:01:00.0: bridge window [mem 0x3fe880000000-0x3fe8ffefffff]
[ 2.189716] pci 0021:01:00.0: bridge window [mem 0x250000000000-0x25fdfff0ffff 64bit pref]
[ 2.190249] pci 0021:00:00.0: PCI bridge to [bus 01-15]
[ 2.190768] pci 0021:00:00.0: bridge window [mem 0x3fe880000000-0x3fe8ffefffff]
[ 2.191806] pci 0021:00:00.0: bridge window [mem 0x250000000000-0x25fdfff0ffff 64bit pref]
[ 2.192358] pci_bus 0021:00: Some PCI device resources are unassigned, try booting with pci=realloc
[ 2.224173] pci_bus 0021:00: resource 4 [mem 0x3fe880000000-0x3fe8fffeffff]
[ 2.224673] pci_bus 0021:00: resource 5 [mem 0x250000000000-0x25fdffffffff 64bit pref]
[ 2.225179] pci_bus 0021:01: resource 0 [io size 0x2000]
[ 2.225688] pci_bus 0021:01: resource 1 [mem 0x3fe880000000-0x3fe8ffefffff]
[ 2.226206] pci_bus 0021:01: resource 2 [mem 0x250000000000-0x25fdfff0ffff 64bit pref]
[ 2.227223] pci_bus 0021:02: resource 0 [io size 0x2000]
[ 2.227712] pci_bus 0021:02: resource 1 [mem 0x3fe880000000-0x3fe8ffefffff]
[ 2.228240] pci_bus 0021:02: resource 2 [mem 0x250000000000-0x25fdfff0ffff 64bit pref]
[ 2.228768] pci_bus 0021:03: resource 0 [io size 0x1000]
[ 2.229290] pci_bus 0021:03: resource 1 [mem 0x3fe881800000-0x3fe881ffffff]
[ 2.229862] pci_bus 0021:03: resource 2 [mem 0x250000000000-0x2500ffffffff 64bit pref]
[ 2.230864] pci_bus 0021:08: resource 0 [io 0x0000-0xffffffffffffffff disabled]
[ 2.231383] pci_bus 0021:08: resource 1 [mem 0x00000000-0xffffffffffffffff disabled]
[ 2.232420] pci_bus 0021:08: resource 2 [mem 0x00000000-0xffffffffffffffff 64bit pref disabled]
[ 2.236779] pci_bus 0021:0d: resource 0 [io 0x0000-0xffffffffffffffff disabled]
[ 2.237273] pci_bus 0021:0d: resource 1 [mem 0x3fe882000000-0x3fe8827fffff]
[ 2.238313] pci_bus 0021:0d: resource 2 [mem 0x00000000-0xffffffffffffffff 64bit pref disabled]
[ 2.238860] pci_bus 0021:0e: resource 0 [io size 0x1000]
[ 2.239366] pci_bus 0021:0e: resource 1 [mem 0x3fe882800000-0x3fe882ffffff]
[ 2.239889] pci_bus 0021:0e: resource 2 [mem 0x00000000-0xffffffffffffffff 64bit pref disabled]
[ 2.240938] pci_bus 0021:0f: resource 0 [io size 0x1000]
[ 2.241465] pci_bus 0021:0f: resource 1 [mem 0x3fe880000000-0x3fe8817fffff]
[ 2.242003] pci_bus 0021:0f: resource 2 [mem 0x00000000-0xffffffffffffffff 64bit pref disabled]
[ 2.259071] pci_bus 0021:10: resource 0 [io size 0x1000]
[ 2.259084] pci_bus 0021:10: resource 1 [mem 0x3fe880000000-0x3fe8817fffff]
[ 2.261389] pci_bus 0021:10: resource 2 [mem 0x00000000-0xffffffffffffffff 64bit pref disabled]
[ 2.261911] pci_bus 0021:11: resource 0 [io 0x0000-0xffffffffffffffff disabled]
[ 2.262439] pci_bus 0021:11: resource 1 [mem 0x00000000-0xffffffffffffffff disabled]
[ 2.267243] pci_bus 0021:11: resource 2 [mem 0x00000000-0xffffffffffffffff 64bit pref disabled]
[ 2.267777] pci 0022:00:00.0: disabling bridge window [io 0xcondary bus 0x000000000000000d associated with PE#fb
[ 2.357640] pci 0021:0d:00.0: Configured PE#fb
[ 2.357653] pci 0021:0d : [PE# fb] Setting up 32-bit TCE table at 0..80000000
[ 2.358652] pci 0021:0d : [PE# fb] Setting up window#0 0..ffffffffff pg=10000
[ 2.358674] pci 0021:0d : [PE# fb] Enabling 64-bit DMA bypass
[ 2.358739] pci 0021:0d:00.0: Adding to iommu group 2
[ 2.358953] pci_bus 0021:0e: Configuring PE for bus
[ 2.358970] pci 0021:0e : [PE# fa] Secondary bus 0x000000000000000e associated with PE#fa
[ 2.359129] pci 0021:0e:00.0: Configured PE#fa
[ 2.359141] pci 0021:0e : [PE# fa] Setting up 32-bit TCE table at 0..80000000
[ 2.360124] pci 0021:0e : [PE# fa] Setting up window#0 0..ffffffffff pg=10000
[ 2.360147] pci 0021:0e : [PE# fa] Enabling 64-bit DMA bypass
[ 2.360203] pci 0021:0e:00.0: Adding to iommu group 3
[ 2.360382] pci_bus 0021:0f: Configuring PE for bus
[ 2.360399] pci 0021:0f : [PE# f9] Secondary bus 0x000000000000000f associated with PE#f9
[ 2.360556] pci 0021:0f:00.0: Configured PE#f9
[ 2.360791] pci_bus 0021:10: Configuring PE for bus
[ 2.360808] pci 0021:10 : [PE# f8] Secondary bus 0x0000000000000010..0x0000000000000010 associated with PE#f8
[ 2.360968] pci 0021:10:00.0: Configured PE#f8
[ 2.360981] pci 0021:10 : [PE# f8] Setting up 32-bit TCE table at 0..80000000
[ 2.361997] pci 0021:10 : [PE# f8] Setting up window#0 0..ffffffffff pg=10000
[ 2.362019] pci 0021:10 : [PE# f8] Enabling 64-bit DMA bypass
[ 2.362075] pci 0021:10:00.0: Adding to iommu group 4
[ 2.362250] pci_bus 0022:00: Configuring PE for bus
[ 2.362263] pci 0022:00 : [PE# fe] Secondary bus 0x0000000000000000 associated with PE#fe
[ 2.362423] pci 0022:00:00.0: Configured PE#fe
[ 2.362675] pci 0001:00:00.0: enabling device (0141 -> 0143)
[ 2.362702] pci 0021:00:00.0: enabling device (0141 -> 0143)
[ 2.362729] pci 0021:01:00.0: enabling device (0141 -> 0143)
[ 2.362759] pci 0021:02:09.0: enabling device (0141 -> 0143)
[ 2.362789] pci 0021:02:0a.0: enabling device (0141 -> 0143)
[ 2.362818] pci 0021:02:0b.0: enabling device (0141 -> 0143)
[ 2.362850] pci 0021:0f:00.0: enabling device (0141 -> 0143)
[ 2.362875] EEH: Capable adapter found: recovery enabled.
[ 2.363095] PCI: Probing PCI hardware done
[ 2.363220] pci 0021:10:00.0: vgaarb: setting as boot VGA device
[ 2.363235] pci 0021:10:00.0: vgaarb: bridge control possible
[ 2.363250] pci 0021:10:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
[ 2.363267] vgaarb: loaded
[ 2.364218] clocksource: Switched to clocksource timebase
[ 2.366614] random: crng init done
[ 2.368674] VFS: Disk quotas dquot_6.6.0
[ 2.368948] VFS: Dquot-cache hash table entries: 8192 (order 0, 65536 bytes)
[ 2.378899] NET: Registered PF_INET protocol family
[ 2.379088] IP idents hash table entries: 262144 (order: 5, 2097152 bytes, vmalloc)
[ 2.386366] tcp_listen_portaddr_hash hash table entries: 65536 (order: 4, 1048576 bytes, vmalloc)
[ 2.386526] Table-perturb hash table entries: 65536 (order: 2, 262144 bytes, vmalloc)
[ 2.386562] TCP established hash table entries: 524288 (order: 6, 4194304 bytes, vmalloc)
[ 2.387375] TCP bind hash table entries: 65536 (order: 5, 2097152 bytes, vmalloc)
[ 2.387588] TCP: Hash tables configured (established 524288 bind 65536)
[ 2.388857] UDP hash table entries: 65536 (order: 6, 4194304 bytes, vmalloc)
[ 2.390674] NET: Registered PF_UNIX/PF_LOCAL protocol family
[ 2.390778] pci 0021:0d:00.0: enabling device (0140 -> 0142)
[ 2.390848] PCI: CLS 0 bytes, default 128
[ 2.391065] Trying to unpack rootfs image as initramfs...
[ 2.404204] Initialise system trusted keyrings
[ 2.404293] Key type blacklist registered
[ 2.404465] workingset: timestamp_bits=38 (anon: 34) max_order=24 bucket_order=0 (anon: 0)
[ 2.409659] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 2.410968] fuse: init (API version 7.45)
[ 2.437376] Key type asymmetric registered
[ 2.437410] Asymmetric key parser 'x509' registered
[ 2.437801] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 244)
[ 2.438206] io scheduler mq-deadline registered
[ 2.445487] ledtrig-cpu: registered to indicate activity on CPUs
[ 2.446235] pci 0021:10:00.0: enabling device (0141 -> 0143)
[ 2.446625] hvc0: raw protocol on /ibm,opal/consoles/serial@0 (boot console)
[ 2.446652] hvc0: No interrupts property, using OPAL event
[ 2.447958] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[ 2.460379] Non-volatile memory driver v1.3
[ 2.518747] loop: module loaded
[ 2.521650] tun: Universal TUN/TAP device driver, 1.6
[ 2.522001] PPP generic driver version 2.4.2
[ 2.522375] VFIO - User Level meta-driver version: 0.3
[ 2.522578] ehci_hcd: block sizes: qh 144 qtd 96 itd 192 sitd 96
[ 2.522709] ohci_hcd: block sizes: ed 112 td 96
[ 2.523433] xhci_hcd 0021:0d:00.0: xHCI Host Controller
[ 2.523570] xhci_hcd 0021:0d:00.0: new USB bus registered, assigned bus number 1
[ 2.523615] xhci_hcd 0021:0d:00.0: // Halt the HC
[ 2.523636] xhci_hcd 0021:0d:00.0: Resetting HCD
[ 2.523654] xhci_hcd 0021:0d:00.0: // Reset the HC
[ 2.523727] xhci_hcd 0021:0d:00.0: Wait for controller to be ready for doorbell rings
[ 2.523872] xhci_hcd 0021:0d:00.0: Reset complete
[ 2.523887] xhci_hcd 0021:0d:00.0: iommu: 64-bit OK but direct DMA is limited by 0
[ 2.523905] xhci_hcd 0021:0d:00.0: Enabling 64-bit DMA addresses.
[ 2.523921] xhci_hcd 0021:0d:00.0: iommu: 64-bit OK but direct DMA is limited by 0
[ 2.523942] xhci_hcd 0021:0d:00.0: HCD page size set to 4K
[ 2.523956] xhci_hcd 0021:0d:00.0: Starting xhci_mem_init
[ 2.523975] xhci_hcd 0021:0d:00.0: Device context base array address = 0x0800008001b40000 (DMA), 000000002cfc5ae9 (virt)
[ 2.524089] xhci_hcd 0021:0d:00.0: Allocated command ring at 00000000b7497c78
[ 2.524162] xhci_hcd 0021:0d:00.0: Allocating primary event ring
[ 2.524191] xhci_hcd 0021:0d:00.0: Allocating 1 scratchpad buffers
[ 2.524253] xhci_hcd 0021:0d:00.0: Ext Cap 000000004f63d022, port offset = 1, count = 4, revision = 0x2
[ 2.524282] xhci_hcd 0021:0d:00.0: Ext Cap 0000000000d52812, port offset = 5, count = 4, revision = 0x3
[ 2.524448] xhci_hcd 0021:0d:00.0: Found 4 USB 2.0 ports and 4 USB 3.0 ports.
[ 2.524469] xhci_hcd 0021:0d:00.0: Finished xhci_mem_init
[ 2.524483] xhci_hcd 0021:0d:00.0: Starting xhci_init
[ 2.524496] xhci_hcd 0021:0d:00.0: xHC can handle at most 64 device slots
[ 2.524516] xhci_hcd 0021:0d:00.0: Setting Max device slots reg = 0x40
[ 2.524537] xhci_hcd 0021:0d:00.0: Setting command ring address to 0x800008001b50001
[ 2.524559] xhci_hcd 0021:0d:00.0: Doorbell array is located at offset 0x5c0 from cap regs base addr
[ 2.524734] xhci_hcd 0021:0d:00.0: // Write event ring dequeue pointer, preserving EHB bit
[ 2.524751] xhci_hcd 0021:0d:00.0: Finished xhci_init
[ 2.524765] xhci_hcd 0021:0d:00.0: hcc params 0x0270f06d hci version 0x96 quirks 0x0000000004000000
[ 2.524791] xhci_hcd 0021:0d:00.0: Got SBRN 48
[ 2.524805] xhci_hcd 0021:0d:00.0: MWI active
[ 2.524818] xhci_hcd 0021:0d:00.0: Finished xhci_pci_reinit
[ 2.524831] xhci_hcd 0021:0d:00.0: supports USB remote wakeup
[ 2.525430] xhci_hcd 0021:0d:00.0: xhci_run
[ 2.525532] xhci_hcd 0021:0d:00.0: ERST deq = 64'h800008001b51000
[ 2.525552] xhci_hcd 0021:0d:00.0: Finished xhci_run for main hcd
[ 2.525979] xhci_hcd 0021:0d:00.0: xHCI Host Controller
[ 2.526066] xhci_hcd 0021:0d:00.0: new USB bus registered, assigned bus number 2
[ 2.526087] xhci_hcd 0021:0d:00.0: Host supports USB 3.0 SuperSpeed
[ 2.526103] xhci_hcd 0021:0d:00.0: supports USB remote wakeup
[ 2.526118] xhci_hcd 0021:0d:00.0: Enable interrupts
[ 2.526135] xhci_hcd 0021:0d:00.0: Enable primary interrupter
[ 2.526157] xhci_hcd 0021:0d:00.0: // Turn on HC, cmd = 0x5.
[ 2.526332] xhci_hcd 0021:0d:00.0: Port change event, 1-3, id 3, portsc: 0x206e1
[ 2.526355] xhci_hcd 0021:0d:00.0: handle_port_status: starting usb1 port polling.
[ 2.526483] usb usb1: default language 0x0409
[ 2.526644] usb usb1: udev 1, busnum 1, minor = 0
[ 2.526658] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 7.01
[ 2.526677] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 2.526694] usb usb1: Product: xHCI Host Controller
[ 2.526708] usb usb1: Manufacturer: Linux 7.1.0-rc3-00004-g3cc4dd04d913 xhci-hcd
[ 2.526876] usb usb1: SerialNumber: 0021:0d:00.0
[ 2.527135] usb usb1: usb_probe_device
[ 2.527181] usb usb1: configuration #1 chosen from 1 choice
[ 2.527200] xHCI xhci_add_endpoint called for root hub
[ 2.527214] xHCI xhci_check_bandwidth called for root hub
[ 2.527245] usb usb1: adding 1-0:1.0 (config #1, interface 0)
[ 2.527459] hub 1-0:1.0: usb_probe_interface
[ 2.527474] hub 1-0:1.0: usb_probe_interface - got id
[ 2.527488] hub 1-0:1.0: USB hub found
[ 2.527525] hub 1-0:1.0: 4 ports detected
[ 2.527669] hub 1-0:1.0: standalone hub
[ 2.527680] hub 1-0:1.0: individual port power switching
[ 2.527694] hub 1-0:1.0: individual port over-current protection
[ 2.527708] hub 1-0:1.0: Single TT
[ 2.527718] hub 1-0:1.0: TT requires at most 8 FS bit times (666 ns)
[ 2.527734] hub 1-0:1.0: power on to power good time: 20ms
[ 2.527769] hub 1-0:1.0: local power source is good
[ 2.528150] hub 1-0:1.0: enabling power on all ports
[ 2.528181] xhci_hcd 0021:0d:00.0: set port power 1-1 ON, portsc: 0x2a0
[ 2.528230] xhci_hcd 0021:0d:00.0: set port power 1-2 ON, portsc: 0x2a0
[ 2.528268] xhci_hcd 0021:0d:00.0: set port power 1-3 ON, portsc: 0x206e1
[ 2.528456] xhci_hcd 0021:0d:00.0: set port power 1-4 ON, portsc: 0x2a0
[ 2.528685] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[ 2.528733] usb usb2: skipped 1 descriptor after endpoint
[ 2.528761] usb usb2: default language 0x0409
[ 2.528812] usb usb2: udev 1, busnum 2, minor = 128
[ 2.528966] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 7.01
[ 2.529508] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 2.529791] usb usb2: Product: xHCI Host Controller
[ 2.530102] usb usb2: Manufacturer: Linux 7.1.0-rc3-00004-g3cc4dd04d913 xhci-hcd
[ 2.530364] usb usb2: SerialNumber: 0021:0d:00.0
[ 2.530835] usb usb2: usb_probe_device
[ 2.530889] usb usb2: configuration #1 chosen from 1 choice
[ 2.531139] xHCI xhci_add_endpoint called for root hub
[ 2.531152] xHCI xhci_check_bandwidth called for root hub
[ 2.531441] usb usb2: adding 2-0:1.0 (config #1, interface 0)
[ 2.531741] hub 2-0:1.0: usb_probe_interface
[ 2.531959] hub 2-0:1.0: usb_probe_interface - got id
[ 2.532247] hub 2-0:1.0: USB hub found
[ 2.532547] hub 2-0:1.0: 4 ports detected
[ 2.532692] hub 2-0:1.0: standalone hub
[ 2.532875] hub 2-0:1.0: individual port power switching
[ 2.533927] hub 2-0:1.0: individual port over-current protection
[ 2.534451] hub 2-0:1.0: TT requires at most 8 FS bit times (666 ns)
[ 2.534978] hub 2-0:1.0: power on to power good time: 100ms
[ 2.535521] hub 2-0:1.0: local power source is good
[ 2.536064] usb usb2-port1: peered to usb1-port1
[ 2.536615] usb usb2-port2: peered to usb1-port2
[ 2.537134] usb usb2-port3: peered to usb1-port3
[ 2.537208] usb usb2-port4: peered to usb1-port4
[ 2.537619] hub 2-0:1.0: enabling power on all ports
[ 2.538171] xhci_hcd 0021:0d:00.0: set port power 2-1 ON, portsc: 0x2a0
[ 2.538719] xhci_hcd 0021:0d:00.0: set port power 2-2 ON, portsc: 0x2a0
[ 2.539303] xhci_hcd 0021:0d:00.0: set port power 2-3 ON, portsc: 0x2a0
[ 2.540350] xhci_hcd 0021:0d:00.0: set port power 2-4 ON, portsc: 0x2a0
[ 2.541781] mousedev: PS/2 mouse device common for all mice
[ 2.556134] xhci_hcd 0021:0d:00.0: Get port status 1-1 read: 0x2a0, return 0x100
[ 2.556179] xhci_hcd 0021:0d:00.0: Get port status 1-2 read: 0x2a0, return 0x100
[ 2.556213] xhci_hcd 0021:0d:00.0: Get port status 1-3 read: 0x206e1, return 0x10101
[ 2.556237] usb usb1-port3: status 0101 change 0001
[ 2.556262] xhci_hcd 0021:0d:00.0: clear port3 connect change, portsc: 0x6e1
[ 2.556296] xhci_hcd 0021:0d:00.0: Get port status 1-4 read: 0x2a0, return 0x100
[ 2.556357] rtc-opal opal-rtc: registered as rtc0
[ 2.572203] rtc-opal opal-rtc: setting system clock to 2026-05-12T06:07:00 UTC (1778566020)
[ 2.572325] i2c_dev: i2c /dev entries driver
[ 2.580006] device-mapper: core: CONFIG_IMA_DISABLE_HTABLE is disabled. Duplicate IMA measurements will not be recorded in the IMA log.
[ 2.580378] device-mapper: uevent: version 1.0.3
[ 2.581109] device-mapper: ioctl: 4.50.0-ioctl (2025-04-28) initialised: dm-devel@lists.linux.dev
[ 2.581151] powernv-cpufreq: cpufreq pstate min 0xffffffd5 nominal 0xffffffef max 0x0
[ 2.581172] powernv-cpufreq: Workload Optimized Frequency is disabled in the platform
[ 2.588393] Freeing initrd memory: 52928K
[ 2.598700] powernv_idle_driver registered
[ 2.599834] NET: Registered PF_INET6 protocol family
[ 2.602893] Segment Routing with IPv6
[ 2.602921] In-situ OAM (IOAM) with IPv6
[ 2.602962] NET: Registered PF_PACKET protocol family
[ 2.603096] Key type dns_resolver registered
[ 2.610900] registered taskstats version 1
[ 2.622240] Loading compiled-in X.509 certificates
[ 2.624030] Loaded X.509 cert 'Build time autogenerated kernel key: 159639d2613889c7180bd55b2c4522e69deecf18'
[ 2.643389] Demotion targets for Node 0: null
[ 2.643403] Demotion targets for Node 8: null
[ 2.643479] kmemleak: Kernel memory leak detector initialized (mem pool available: 5807)
[ 2.643483] kmemleak: Automatic memory scanning thread started
[ 2.644139] xhci_hcd 0021:0d:00.0: Get port status 2-1 read: 0x2a0, return 0x2a0
[ 2.644178] xhci_hcd 0021:0d:00.0: Get port status 2-2 read: 0x2a0, return 0x2a0
[ 2.644213] xhci_hcd 0021:0d:00.0: Get port status 2-3 read: 0x2a0, return 0x2a0
[ 2.644249] xhci_hcd 0021:0d:00.0: Get port status 2-4 read: 0x2a0, return 0x2a0
[ 2.644283] hub 2-0:1.0: state 7 ports 4 chg 0000 evt 0000
[ 2.644318] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-1 status = 0xe0002a0
[ 2.644363] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-2 status = 0xe0002a0
[ 2.644408] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-3 status = 0xe0002a0
[ 2.644453] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-4 status = 0xe0002a0
[ 2.644487] hub 2-0:1.0: hub_suspend
[ 2.644510] usb usb2: bus auto-suspend, wakeup 1
[ 2.644537] usb usb2: suspend raced with wakeup event
[ 2.644552] usb usb2: usb auto-resume
[ 2.645217] Key type .fscrypt registered
[ 2.645232] Key type fscrypt-provisioning registered
[ 2.645291] Key type big_key registered
[ 2.645306] trusted_key: H_PKS_WRAP_OBJECT interface not supported
[ 2.656143] hub 2-0:1.0: hub_resume
[ 2.664202] hub 1-0:1.0: state 7 ports 4 chg 0008 evt 0000
[ 2.664233] xhci_hcd 0021:0d:00.0: Get port status 1-3 read: 0x6e1, return 0x101
[ 2.664267] usb usb1-port3: status 0101, change 0000, 12 Mb/s
[ 2.664302] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 2.664389] xhci_hcd 0021:0d:00.0: Slot 1 output ctx = 0x08000080194e0000 (dma)
[ 2.664416] xhci_hcd 0021:0d:00.0: Slot 1 input ctx = 0x08000080194e1000 (dma)
[ 2.664447] xhci_hcd 0021:0d:00.0: Set slot id 1 dcbaa entry 00000000c5c2b320 to 0x8000080194e0000
[ 2.664573] xhci_hcd 0021:0d:00.0: set port reset, actual port 1-3 status = 0x6f1
[ 2.664759] Key type encrypted registered
[ 2.664776] ima: No TPM chip found, activating TPM-bypass!
[ 2.664804] ima: Allocated hash algorithm: sha256
[ 2.664855] ima: No architecture policies found
[ 2.664952] evm: Initialising EVM extended attributes:
[ 2.664966] evm: security.selinux
[ 2.664977] evm: security.SMACK64
[ 2.664988] evm: security.SMACK64EXEC
[ 2.664999] evm: security.SMACK64TRANSMUTE
[ 2.665010] evm: security.SMACK64MMAP
[ 2.665023] evm: security.apparmor
[ 2.665034] evm: security.ima
[ 2.665045] evm: security.capability
[ 2.665057] evm: HMAC attrs: 0x1
[ 2.665137] SED: plpks not available
[ 2.667602] PM: genpd: Disabling unused power domains
[ 2.667778] integrity: Unable to open file: /etc/keys/x509_ima.der (-2)
[ 2.667791] integrity: Unable to open file: /etc/keys/x509_evm.der (-2)
[ 2.671947] Freeing unused kernel image (initmem) memory: 8768K
[ 2.672065] Run /init as init process
[ 2.672076] with arguments:
[ 2.672087] /init
[ 2.672095] with environment:
[ 2.672104] HOME=/
[ 2.672112] TERM=linux
[ 2.672131] xhci_hcd 0021:0d:00.0: xhci_hub_status_data: stopping usb1 port polling
Loading, please wait...
+ '[' -z ]
+ BOOT=local
+ '[' -n ]
+ '[' '=' none ]
+ resume=
+ mount -t tmpfs -o 'nodev,noexec,nosuid,size=10%,mode=0755' tmpfs /run
+ mkdir -m 0700 /run/initramfs
[ 2.684140] xhci_hcd 0021:0d:00.0: Get port status 2-1 read: 0x2a0, return 0x2a0
+ '[' -n[ 2.684182] xhci_hcd 0021:0d:00.0: Get port s /run/initramfs/tatus 2-2 read: 0x2a0, return 0x2a0
initramfs.debug[ 2.684221] xhci_hcd 0021:0d: ]00.0: Get port status 2-3 read: 0x2a0, return 0x2a0
[ 2.697879] xhci_hcd 0021:0d:00.0: Get port status 2-4 read: 0x2a0, return 0x2a0
[ 2.698410] hub 2-0:1.0: state 7 ports 4 chg 0000 evt 0000
+ exec
[ 2.714881] xhci_hcd 0021:0d:00.0: Port change event, 1-3, id 3, portsc: 0x200e03
[ 2.714902] xhci_hcd 0021:0d:00.0: handle_port_status: starting usb1 port polling.
[ 2.728139] xhci_hcd 0021:0d:00.0: Get port status 1-3 read: 0x200e03, return 0x100503
[ 2.728175] xhci_hcd 0021:0d:00.0: clear port3 reset change, portsc: 0xe03
[ 2.788127] usb 1-3: new high-speed USB device number 2 using xhci_hcd
[ 2.788149] xhci_hcd 0021:0d:00.0: Slot ID 1: HW portnum 2, hcd portnum 2
[ 2.788163] xhci_hcd 0021:0d:00.0: udev->tt = 0000000000000000
[ 2.788177] xhci_hcd 0021:0d:00.0: udev->ttport = 0x0
[ 2.788190] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 2.788231] xhci_hcd 0021:0d:00.0: Successful setup context command
[ 2.788251] xhci_hcd 0021:0d:00.0: Op regs DCBAA ptr = 0x800008001b40000
[ 2.788265] xhci_hcd 0021:0d:00.0: Slot ID 1 dcbaa entry @00000000c5c2b320 = 0x8000080194e0000
[ 2.788283] xhci_hcd 0021:0d:00.0: Output Context DMA address = 0x8000080194e0000
[ 2.788299] xhci_hcd 0021:0d:00.0: Internal device address = 0
[ 2.788470] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 2.788614] xhci_hcd 0021:0d:00.0: set port reset, actual port 1-3 status = 0xe11
[ 2.838839] xhci_hcd 0021:0d:00.0: Port change event, 1-3, id 3, portsc: 0x200e03
[ 2.838861] xhci_hcd 0021:0d:00.0: handle_port_status: starting usb1 port polling.
[ 2.856135] xhci_hcd 0021:0d:00.0: Get port status 1-3 read: 0x200e03, return 0x100503
[ 2.856170] xhci_hcd 0021:0d:00.0: clear port3 reset change, portsc: 0xe03
[ 2.900145] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-1 status = 0xe0002a0
[ 2.900185] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-2 status = 0xe0002a0
[ 2.900223] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-3 status = 0xe0002a0
[ 2.900257] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-4 status = 0xe0002a0
[ 2.900285] hub 2-0:1.0: hub_suspend
[ 2.900300] usb usb2: bus auto-suspend, wakeup 1
[ 2.900324] usb usb2: suspend raced with wakeup event
[ 2.900335] usb usb2: usb auto-resume
[ 2.912136] hub 2-0:1.0: hub_resume
[ 2.916129] xhci_hcd 0021:0d:00.0: xhci_hub_status_data: stopping usb1 port polling
[ 2.916148] xhci_hcd 0021:0d:00.0: Resetting device with slot ID 1
[ 2.916166] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 2.916191] xhci_hcd 0021:0d:00.0: Completed reset device command.
[ 2.916213] xhci_hcd 0021:0d:00.0: Can't reset device (slot ID 1) in default state
[ 2.916229] xhci_hcd 0021:0d:00.0: Not freeing device rings.
[ 2.916249] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 2.916355] xhci_hcd 0021:0d:00.0: Successful setup address command
[ 2.916375] xhci_hcd 0021:0d:00.0: Op regs DCBAA ptr = 0x800008001b40000
[ 2.916388] xhci_hcd 0021:0d:00.0: Slot ID 1 dcbaa entry @00000000c5c2b320 = 0x8000080194e0000
[ 2.916406] xhci_hcd 0021:0d:00.0: Output Context DMA address = 0x8000080194e0000
[ 2.916421] xhci_hcd 0021:0d:00.0: Internal device address = 1
[ 2.936133] xhci_hcd 0021:0d:00.0: Get port status 2-1 read: 0x2a0, return 0x2a0
[ 2.936165] xhci_hcd 0021:0d:00.0: Get port status 2-2 read: 0x2a0, return 0x2a0
[ 2.936197] xhci_hcd 0021:0d:00.0: Get port status 2-3 read: 0x2a0, return 0x2a0
[ 2.936226] xhci_hcd 0021:0d:00.0: Get port status 2-4 read: 0x2a0, return 0x2a0
[ 2.936251] hub 2-0:1.0: state 7 ports 4 chg 0000 evt 0000
[ 2.976978] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 2.977111] usb 1-3: default language 0x0009
[ 2.977353] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 2.977727] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 2.978103] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 2.978237] usb 1-3: udev 2, busnum 1, minor = 1
[ 2.978250] usb 1-3: New USB device found, idVendor=046b, idProduct=ff01, bcdDevice= 1.00
[ 2.978267] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2.978283] usb 1-3: Product: Virtual Hub
[ 2.978293] usb 1-3: Manufacturer: American Megatrends Inc.
[ 2.978305] usb 1-3: SerialNumber: serial
[ 2.978599] usb 1-3: usb_probe_device
[ 2.978610] usb 1-3: configuration #1 chosen from 1 choice
[ 2.978640] xhci_hcd 0021:0d:00.0: add ep 0x81, slot id 1, new drop flags = 0x0, new add flags = 0x8
[ 2.978660] xhci_hcd 0021:0d:00.0: xhci_check_bandwidth called for udev 000000005a007bef
[ 2.978680] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 2.982354] xhci_hcd 0021:0d:00.0: Successful Endpoint Configure command
[ 2.982420] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 2.982455] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 2.990724] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 2.990858] usb 1-3: adding 1-3:1.0 (config #1, interface 0)
[ 2.991099] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 2.991268] hub 1-3:1.0: usb_probe_interface
[ 2.991281] hub 1-3:1.0: usb_probe_interface - got id
[ 2.991293] hub 1-3:1.0: USB hub found
[ 2.991474] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 2.991608] hub 1-3:1.0: 5 ports detected
[ 2.991620] hub 1-3:1.0: standalone hub
[ 2.991629] hub 1-3:1.0: individual port power switching
[ 2.991640] hub 1-3:1.0: individual port over-current protection
[ 2.991654] hub 1-3:1.0: Single TT
[ 2.991663] hub 1-3:1.0: TT requires at most 32 FS bit times (2664 ns)
[ 2.991677] hub 1-3:1.0: power on to power good time: 100ms
[ 2.992358] hub 1-3:1.0: local power source is good
[ 2.992658] xhci_hcd 0021:0d:00.0: xHCI version 96 needs hub TT think time and number of ports
[ 2.992677] xhci_hcd 0021:0d:00.0: Set up configure endpoint for hub device.
[ 2.992694] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.028267] xhci_hcd 0021:0d:00.0: Successful Endpoint Configure command
[ 3.029500] hub 1-3:1.0: enabling power on all ports
[ 3.061303] ahci 0021:0e:00.0: enabling device (0141 -> 0143)
[ 3.061520] ahci 0021:0e:00.0: iommu: 64-bit OK but direct DMA is limited by 0
[ 3.061536] ahci 0021:0e:00.0: iommu: 64-bit OK but direct DMA is limited by 0
[ 3.071633] ahci 0021:0e:00.0: AHCI vers 0001.0000, 32 command slots, 6 Gbps, SATA mode
[ 3.071651] ahci 0021:0e:00.0: 4/4 ports implemented (port mask 0xf)
[ 3.071665] ahci 0021:0e:00.0: flags: 64bit ncq sntf led only pmp fbs pio slum part sxs
[ 3.074588] scsi host0: ahci
[ 3.075925] scsi host1: ahci
[ 3.076771] scsi host2: ahci
[ 3.077698] scsi host3: ahci
[ 3.078079] ata1: SATA max UDMA/133 abar m2048@0x3fe882800000 port 0x3fe882800100 irq 47 lpm-pol 1 ext
[ 3.078099] ata2: SATA max UDMA/133 abar m2048@0x3fe882800000 port 0x3fe882800180 irq 47 lpm-pol 1 ext
[ 3.078117] ata3: SATA max UDMA/133 abar m2048@0x3fe882800000 port 0x3fe882800200 irq 47 lpm-pol 1 ext
[ 3.078135] ata4: SATA max UDMA/133 abar m2048@0x3fe882800000 port 0x3fe882800280 irq 47 lpm-pol 1 ext
[ 3.136492] usb 1-3-port1: status 0501 change 0001
[ 3.137114] usb 1-3-port2: status 0501 change 0001
[ 3.137738] usb 1-3-port3: status 0501 change 0001
[ 3.138364] usb 1-3-port4: status 0301 change 0001
[ 3.140144] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-1 status = 0xe0002a0
[ 3.140193] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-2 status = 0xe0002a0
[ 3.140231] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-3 status = 0xe0002a0
[ 3.140270] xhci_hcd 0021:0d:00.0: set port remote wake mask, actual port 2-4 status = 0xe0002a0
[ 3.140297] hub 2-0:1.0: hub_suspend
[ 3.140314] usb usb2: bus auto-suspend, wakeup 1
[ 3.140339] xhci_hcd 0021:0d:00.0: xhci_hub_status_data: stopping usb2 port polling
[ 3.180351] ata3: SATA link down (SStatus 0 SControl 300)
[ 3.180446] ata4: SATA link down (SStatus 0 SControl 300)
[ 3.240131] usb 1-3: Driver uses different interval (2048 microframes) than xHCI (64 microframes)
[ 3.240161] hub 1-3:1.0: state 7 ports 5 chg 001e evt 0000
[ 3.240619] usb 1-3-port1: status 0501, change 0000, 480 Mb/s
[ 3.240664] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.240697] xhci_hcd 0021:0d:00.0: Slot 2 output ctx = 0x08000080194e2000 (dma)
[ 3.240716] xhci_hcd 0021:0d:00.0: Slot 2 input ctx = 0x08000080194e3000 (dma)
[ 3.240736] xhci_hcd 0021:0d:00.0: Set slot id 2 dcbaa entry 00000000788ce8cc to 0x8000080194e2000
[ 3.340129] usb 1-3.1: new high-speed USB device number 3 using xhci_hcd
[ 3.340148] xhci_hcd 0021:0d:00.0: Slot ID 2: HW portnum 2, hcd portnum 2
[ 3.340163] xhci_hcd 0021:0d:00.0: udev->tt = 0000000000000000
[ 3.340177] xhci_hcd 0021:0d:00.0: udev->ttport = 0x0
[ 3.340189] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.340404] xhci_hcd 0021:0d:00.0: Successful setup context command
[ 3.340424] xhci_hcd 0021:0d:00.0: Op regs DCBAA ptr = 0x800008001b40000
[ 3.340437] xhci_hcd 0021:0d:00.0: Slot ID 2 dcbaa entry @00000000788ce8cc = 0x8000080194e2000
[ 3.340455] xhci_hcd 0021:0d:00.0: Output Context DMA address = 0x8000080194e2000
[ 3.340471] xhci_hcd 0021:0d:00.0: Internal device address = 0
[ 3.340988] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.352140] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[ 3.352183] ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[ 3.352921] ata1.00: ATA-10: ST1000NX0313 00LY266 00LY265IBM, BE33, max UDMA/133
[ 3.353074] ata1.00: 1953525168 sectors, multi 0: LBA48 NCQ (depth 32), AA
[ 3.353176] ata1.00: Features: DIPM
[ 3.353720] ata1.00: configured for UDMA/133
[ 3.353738] ata2.00: ATA-10: ST1000NX0313 00LY266 00LY265IBM, BE33, max UDMA/133
[ 3.353884] ata2.00: 1953525168 sectors, multi 0: LBA48 NCQ (depth 32), AA
[ 3.353985] ata2.00: Features: DIPM
[ 3.354140] scsi 0:0:0:0: Direct-Access ATA ST1000NX0313 BE33 PQ: 0 ANSI: 5
[ 3.354566] ata2.00: configured for UDMA/133
[ 3.354920] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 3.355040] sd 0:0:0:0: [sda] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
[ 3.355061] sd 0:0:0:0: [sda] 4096-byte physical blocks
[ 3.355111] sd 0:0:0:0: [sda] Write Protect is off
[ 3.355149] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 3.355204] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 3.355276] sd 0:0:0:0: [sda] Preferred minimum I/O size 4096 bytes
[ 3.355291] scsi 1:0:0:0: Direct-Access ATA ST1000NX0313 BE33 PQ: 0 ANSI: 5
[ 3.356106] sd 1:0:0:0: Attached scsi generic sg1 type 0
[ 3.356194] sd 1:0:0:0: [sdb] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
[ 3.356219] sd 1:0:0:0: [sdb] 4096-byte physical blocks
[ 3.356252] sd 1:0:0:0: [sdb] Write Protect is off
[ 3.356274] sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 3.356321] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 3.356383] sd 1:0:0:0: [sdb] Preferred minimum I/O size 4096 bytes
[ 3.436131] xhci_hcd 0021:0d:00.0: Resetting device with slot ID 2
[ 3.436155] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.436180] xhci_hcd 0021:0d:00.0: Completed reset device command.
[ 3.436199] xhci_hcd 0021:0d:00.0: Can't reset device (slot ID 2) in default state
[ 3.436217] xhci_hcd 0021:0d:00.0: Not freeing device rings.
[ 3.436235] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.436749] xhci_hcd 0021:0d:00.0: Successful setup address command
[ 3.436770] xhci_hcd 0021:0d:00.0: Op regs DCBAA ptr = 0x800008001b40000
[ 3.436784] xhci_hcd 0021:0d:00.0: Slot ID 2 dcbaa entry @00000000788ce8cc = 0x8000080194e2000
[ 3.436803] xhci_hcd 0021:0d:00.0: Output Context DMA address = 0x8000080194e2000
[ 3.436818] xhci_hcd 0021:0d:00.0: Internal device address = 2
[ 3.458118] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.458252] usb 1-3.1: default language 0x0409
[ 3.458618] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.459118] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.459618] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.459752] usb 1-3.1: udev 3, busnum 1, minor = 2
[ 3.459764] usb 1-3.1: New USB device found, idVendor=046b, idProduct=ff20, bcdDevice= 1.00
[ 3.459781] usb 1-3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3.459797] usb 1-3.1: Product: Virtual Cdrom Device
[ 3.459809] usb 1-3.1: Manufacturer: American Megatrends Inc.
[ 3.459823] usb 1-3.1: SerialNumber: AAAABBBBCCCC1
[ 3.460018] usb 1-3.1: usb_probe_device
[ 3.460031] usb 1-3.1: configuration #1 chosen from 1 choice
[ 3.460058] xhci_hcd 0021:0d:00.0: add ep 0x81, slot id 2, new drop flags = 0x0, new add flags = 0x8
[ 3.460084] xhci_hcd 0021:0d:00.0: add ep 0x2, slot id 2, new drop flags = 0x0, new add flags = 0x18
[ 3.460103] xhci_hcd 0021:0d:00.0: xhci_check_bandwidth called for udev 00000000f8f45ead
[ 3.460135] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.460180] xhci_hcd 0021:0d:00.0: Successful Endpoint Configure command
[ 3.460262] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.460296] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.460348] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.460382] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.460753] usb 1-3.1: adding 1-3.1:1.0 (config #1, interface 0)
[ 3.461118] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.461878] usb 1-3-port2: status 0501, change 0000, 480 Mb/s
[ 3.461898] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.461927] xhci_hcd 0021:0d:00.0: Slot 3 output ctx = 0x08000080194e4000 (dma)
[ 3.461945] xhci_hcd 0021:0d:00.0: Slot 3 input ctx = 0x08000080194e5000 (dma)
[ 3.461967] xhci_hcd 0021:0d:00.0: Set slot id 3 dcbaa entry 00000000ff8a403f to 0x8000080194e4000
[ 3.465071] sd 1:0:0:0: [sdb] Attached SCSI disk
[ 3.496608] sda: sda1 sda2
[ 3.496899] sd 0:0:0:0: [sda] Attached SCSI disk
[ 3.525899] ast 0021:10:00.0: Platform has no I/O space, using MMIO
[ 3.525927] ast 0021:10:00.0: Using P2A bridge for configuration
[ 3.525941] ast 0021:10:00.0: AST 2400 detected
[ 3.526190] ast 0021:10:00.0: [drm] Using analog VGA
[ 3.560129] usb 1-3.2: new high-speed USB device number 4 using xhci_hcd
[ 3.560254] xhci_hcd 0021:0d:00.0: Slot ID 3: HW portnum 2, hcd portnum 2
[ 3.560269] xhci_hcd 0021:0d:00.0: udev->tt = 0000000000000000
[ 3.560283] xhci_hcd 0021:0d:00.0: udev->ttport = 0x0
[ 3.560295] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.560329] xhci_hcd 0021:0d:00.0: Successful setup context command
[ 3.560349] xhci_hcd 0021:0d:00.0: Op regs DCBAA ptr = 0x800008001b40000
[ 3.560364] xhci_hcd 0021:0d:00.0: Slot ID 3 dcbaa entry @00000000ff8a403f = 0x8000080194e4000
[ 3.560382] xhci_hcd 0021:0d:00.0: Output Context DMA address = 0x8000080194e4000
[ 3.560397] xhci_hcd 0021:0d:00.0: Internal device address = 0
[ 3.560872] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.576132] [drm] Initialized ast 0.1.0 for 0021:10:00.0 on minor 0
[ 3.656635] xhci_hcd 0021:0d:00.0: Resetting device with slot ID 3
[ 3.657178] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.657454] xhci_hcd 0021:0d:00.0: Completed reset device command.
[ 3.657459] xhci_hcd 0021:0d:00.0: Can't reset device (slot ID 3) in default state
[ 3.657843] xhci_hcd 0021:0d:00.0: Not freeing device rings.
[ 3.658856] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.660104] xhci_hcd 0021:0d:00.0: Successful setup address command
[ 3.660478] xhci_hcd 0021:0d:00.0: Op regs DCBAA ptr = 0x800008001b40000
[ 3.660742] xhci_hcd 0021:0d:00.0: Slot ID 3 dcbaa entry @00000000ff8a403f = 0x8000080194e4000
[ 3.660811] xhci_hcd 0021:0d:00.0: Output Context DMA address = 0x8000080194e4000
[ 3.660814] xhci_hcd 0021:0d:00.0: Internal device address = 3
[ 3.665310] Console: switching to colour frame buffer device 128x48
[ 3.683518] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.684130] usb 1-3.2: default language 0x0409
[ 3.685267] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.687275] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.688892] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.689732] usb 1-3.2: udev 4, busnum 1, minor = 3
[ 3.690133] usb 1-3.2: New USB device found, idVendor=046b, idProduct=ff40, bcdDevice= 1.00
[ 3.690650] usb 1-3.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3.690776] usb 1-3.2: Product: Virtual Floppy Device
[ 3.690778] usb 1-3.2: Manufacturer: American Megatrends Inc.
[ 3.690780] usb 1-3.2: SerialNumber: AAAABBBBCCCC2
[ 3.715777] usb 1-3.2: usb_probe_device
[ 3.716134] usb 1-3.2: configuration #1 chosen from 1 choice
[ 3.717987] xhci_hcd 0021:0d:00.0: add ep 0x81, slot id 3, new drop flags = 0x0, new add flags = 0x8
[ 3.719335] xhci_hcd 0021:0d:00.0: add ep 0x2, slot id 3, new drop flags = 0x0, new add flags = 0x18
[ 3.719916] xhci_hcd 0021:0d:00.0: xhci_check_bandwidth called for udev 000000008bf27780
[ 3.720462] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.720767] xhci_hcd 0021:0d:00.0: Successful Endpoint Configure command
[ 3.729276] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.729565] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.731082] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.731385] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.733656] usb 1-3.2: adding 1-3.2:1.0 (config #1, interface 0)
[ 3.742144] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.752144] usb 1-3-port3: status 0501, change 0000, 480 Mb/s
[ 3.752158] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.752179] xhci_hcd 0021:0d:00.0: Slot 4 output ctx = 0x08000080194e6000 (dma)
[ 3.752183] xhci_hcd 0021:0d:00.0: Slot 4 input ctx = 0x08000080194e7000 (dma)
[ 3.752191] xhci_hcd 0021:0d:00.0: Set slot id 4 dcbaa entry 000000005d927971 to 0x8000080194e6000
[ 3.768731] ast 0021:10:00.0: [drm] fb0: astdrmfb frame buffer device
[ 3.852509] usb 1-3.3: new high-speed USB device number 5 using xhci_hcd
[ 3.853356] xhci_hcd 0021:0d:00.0: Slot ID 4: HW portnum 2, hcd portnum 2
[ 3.854049] xhci_hcd 0021:0d:00.0: udev->tt = 0000000000000000
[ 3.854615] xhci_hcd 0021:0d:00.0: udev->ttport = 0x0
[ 3.855034] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.856200] xhci_hcd 0021:0d:00.0: Successful setup context command
[ 3.856557] xhci_hcd 0021:0d:00.0: Op regs DCBAA ptr = 0x800008001b40000
[ 3.856819] xhci_hcd 0021:0d:00.0: Slot ID 4 dcbaa entry @000000005d927971 = 0x8000080194e6000
[ 3.857075] xhci_hcd 0021:0d:00.0: Output Context DMA address = 0x8000080194e6000
[ 3.857325] xhci_hcd 0021:0d:00.0: Internal device address = 0
[ 3.858774] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.952125] xhci_hcd 0021:0d:00.0: Resetting device with slot ID 4
[ 3.952130] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.952152] xhci_hcd 0021:0d:00.0: Completed reset device command.
[ 3.952156] xhci_hcd 0021:0d:00.0: Can't reset device (slot ID 4) in default state
[ 3.952161] xhci_hcd 0021:0d:00.0: Not freeing device rings.
[ 3.952169] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.952648] xhci_hcd 0021:0d:00.0: Successful setup address command
[ 3.952658] xhci_hcd 0021:0d:00.0: Op regs DCBAA ptr = 0x800008001b40000
[ 3.952660] xhci_hcd 0021:0d:00.0: Slot ID 4 dcbaa entry @000000005d927971 = 0x8000080194e6000
[ 3.952663] xhci_hcd 0021:0d:00.0: Output Context DMA address = 0x8000080194e6000
[ 3.952665] xhci_hcd 0021:0d:00.0: Internal device address = 4
[ 3.970141] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.970283] usb 1-3.3: default language 0x0409
[ 3.970643] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.971142] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.971642] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.971782] usb 1-3.3: udev 5, busnum 1, minor = 4
[ 3.971784] usb 1-3.3: New USB device found, idVendor=046b, idProduct=ff31, bcdDevice= 1.00
[ 3.971786] usb 1-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3.971788] usb 1-3.3: Product: Virtual HardDisk Device
[ 3.971790] usb 1-3.3: Manufacturer: American Megatrends Inc.
[ 3.971791] usb 1-3.3: SerialNumber: AAAABBBBCCCC3
[ 3.971989] usb 1-3.3: usb_probe_device
[ 3.971991] usb 1-3.3: configuration #1 chosen from 1 choice
[ 3.972003] xhci_hcd 0021:0d:00.0: add ep 0x81, slot id 4, new drop flags = 0x0, new add flags = 0x8
[ 3.972011] xhci_hcd 0021:0d:00.0: add ep 0x2, slot id 4, new drop flags = 0x0, new add flags = 0x18
[ 3.972014] xhci_hcd 0021:0d:00.0: xhci_check_bandwidth called for udev 000000009a8d1692
[ 3.972019] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.972076] xhci_hcd 0021:0d:00.0: Successful Endpoint Configure command
[ 3.972179] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.972221] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.972285] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.972332] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.972784] usb 1-3.3: adding 1-3.3:1.0 (config #1, interface 0)
[ 3.973142] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 3.974039] usb 1-3-port4: status 0301, change 0000, 1.5 Mb/s
[ 3.974047] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 3.974077] xhci_hcd 0021:0d:00.0: Slot 5 output ctx = 0x08000080194e8000 (dma)
[ 3.974085] xhci_hcd 0021:0d:00.0: Slot 5 input ctx = 0x08000080194e9000 (dma)
[ 3.974091] xhci_hcd 0021:0d:00.0: Set slot id 5 dcbaa entry 000000005170a62d to 0x8000080194e8000
[ 4.068512] usb 1-3.4: new low-speed USB device number 6 using xhci_hcd
[ 4.069843] xhci_hcd 0021:0d:00.0: Slot ID 5: HW portnum 2, hcd portnum 2
[ 4.070573] xhci_hcd 0021:0d:00.0: udev->tt = 0000000025649f96
[ 4.070591] xhci_hcd 0021:0d:00.0: udev->ttport = 0x4
[ 4.071111] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 4.072311] xhci_hcd 0021:0d:00.0: Successful setup context command
[ 4.073546] xhci_hcd 0021:0d:00.0: Op regs DCBAA ptr = 0x800008001b40000
[ 4.074811] xhci_hcd 0021:0d:00.0: Slot ID 5 dcbaa entry @000000005170a62d = 0x8000080194e8000
[ 4.076675] xhci_hcd 0021:0d:00.0: Output Context DMA address = 0x8000080194e8000
[ 4.077939] xhci_hcd 0021:0d:00.0: Internal device address = 0
[ 4.081783] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 4.136131] raid6: vpermxor8 gen() 30046 MB/s
[ 4.176126] xhci_hcd 0021:0d:00.0: Resetting device with slot ID 5
[ 4.176150] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 4.176275] xhci_hcd 0021:0d:00.0: Completed reset device command.
[ 4.176347] xhci_hcd 0021:0d:00.0: Can't reset device (slot ID 5) in default state
[ 4.176367] xhci_hcd 0021:0d:00.0: Not freeing device rings.
[ 4.176384] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 4.177404] xhci_hcd 0021:0d:00.0: Successful setup address command
[ 4.177425] xhci_hcd 0021:0d:00.0: Op regs DCBAA ptr = 0x800008001b40000
[ 4.177439] xhci_hcd 0021:0d:00.0: Slot ID 5 dcbaa entry @000000005170a62d = 0x8000080194e8000
[ 4.177525] xhci_hcd 0021:0d:00.0: Output Context DMA address = 0x8000080194e8000
[ 4.177540] xhci_hcd 0021:0d:00.0: Internal device address = 5
[ 4.204142] raid6: vpermxor4 gen() 28177 MB/s
[ 4.204910] usb 1-3.4: skipped 1 descriptor after interface
[ 4.205046] usb 1-3.4: skipped 1 descriptor after interface
[ 4.205898] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 4.206408] usb 1-3.4: default language 0x0409
[ 4.210899] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 4.215148] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 4.215658] usb 1-3.4: udev 6, busnum 1, minor = 5
[ 4.215773] usb 1-3.4: New USB device found, idVendor=046b, idProduct=ff10, bcdDevice= 1.00
[ 4.215826] usb 1-3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 4.215842] usb 1-3.4: Product: Virtual Keyboard and Mouse
[ 4.215854] usb 1-3.4: Manufacturer: American Megatrends Inc.
[ 4.216041] usb 1-3.4: usb_probe_device
[ 4.216125] usb 1-3.4: configuration #1 chosen from 1 choice
[ 4.216153] xhci_hcd 0021:0d:00.0: add ep 0x81, slot id 5, new drop flags = 0x0, new add flags = 0x8
[ 4.216178] xhci_hcd 0021:0d:00.0: add ep 0x82, slot id 5, new drop flags = 0x0, new add flags = 0x28
[ 4.216196] xhci_hcd 0021:0d:00.0: xhci_check_bandwidth called for udev 00000000cdf0837a
[ 4.216216] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 4.222152] xhci_hcd 0021:0d:00.0: Successful Endpoint Configure command
[ 4.222277] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 4.222409] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 4.230164] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 4.230209] xhci_hcd 0021:0d:00.0: // Ding dong!
[ 4.238821] usb 1-3.4: adding 1-3.4:1.0 (config #1, interface 0)
[ 4.242276] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 4.242840] usb 1-3.4: adding 1-3.4:1.1 (config #1, interface 1)
[ 4.245775] xhci_hcd 0021:0d:00.0: Waiting for status stage event
[ 4.246442] hub 1-3:1.0: state 7 ports 5 chg 0000 evt 0010
^ permalink raw reply
* Re: [PATCH] drivers/base/memory: make memory block get/put explicit
From: David Hildenbrand (Arm) @ 2026-05-12 6:25 UTC (permalink / raw)
To: Muchun Song
Cc: Muchun Song, Oscar Salvador, Greg Kroah-Hartman,
Rafael J. Wysocki, Danilo Krummrich, Andrew Morton,
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka, Mike Rapoport,
Suren Baghdasaryan, Michal Hocko, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy,
Heiko Carstens, Vasily Gorbik, Alexander Gordeev,
Christian Borntraeger, Sven Schnelle, linux-mm, driver-core,
linux-kernel, linuxppc-dev, linux-s390
In-Reply-To: <E9BB5FC5-0785-4162-8D1A-2A51C7250B34@linux.dev>
On 5/12/26 05:11, Muchun Song wrote:
>
>
>> On May 11, 2026, at 21:23, Muchun Song <muchun.song@linux.dev> wrote:
>>
>>
>>
>>>
>>> On 5/11/26 13:18, Muchun Song wrote:
>>>
>>> Better mention some of the other changes here, like removing find_memory_block().
>>
>> Will do.
>>
>>>
>>> [...]
>>>
>>>
>>> While at it, please drop the "extern".
>>
>> OK.
>>
>>>
>>>
>>> Would guards come in handy here?
>>
>> You mean to introduce something like:
>>
>> scoped_guard(memory_block, id) {
>> }
>>
>> Right? If yes, I will give it a try.
>
> Hi David,
Hi,
>
> Did I get that right?
I assume so, but it's indeed rather ugly. ... in particular the CLASS and
scoped_class() thingies are pretty intuitive.
I thought we could use guard()/scoped_guard(), but reading the details, it's
mostly for locks only.
There is only one users of scoped_class in the tree (overlayfs).
Maybe, if we would do this properly, we would actually provide our own wrappers,
like
MEMORY_BLOCK
scoped_memory_block
not even providing "memory_block_get", as that would be implicit.
Like
MEMORY_BLOCK(mem)(block_id); // the second () is confusing
scoped_memory_block(mem, block_id) {
}
But that requires more thought, and I don't really know what the best practice
is there ...
So thanks for trying, but let's leave it as is for now.
--
Cheers,
David
^ permalink raw reply
* [PATCH] ASoC: fsl_sai: Eliminate possible interrupt storm during probe
From: Shengjiu Wang @ 2026-05-12 6:52 UTC (permalink / raw)
To: shengjiu.wang, Xiubo.Lee, festevam, nicoleotsuka, lgirdwood,
broonie, perex, tiwai, linux-sound, linuxppc-dev, linux-kernel
When the SAI peripheral is left in a running state by the bootloader,
the driver can experience an interrupt storm during probe that prevents
successful initialization. This occurs because the current code registers
the IRQ handler before resetting the hardware to a known state.
The issue manifests as:
- Continuous interrupts firing immediately after devm_request_irq()
- Driver probe failure or system hang
- Error messages about unhandled interrupts
This is particularly problematic on systems where U-Boot or other
bootloaders enable SAI for boot-time audio feedback or diagnostics
and don't properly disable it before handing control to Linux.
Fix this by reordering the probe sequence:
1. Add fsl_sai_reset_hw() to clear TCSR/RCSR control registers,
which disables the transmitter/receiver and all interrupt sources
2. Move devm_request_irq() to after hardware initialization
This ensures the SAI is in a clean reset state before the interrupt
handler can be invoked, preventing the storm while maintaining proper
error handling and cleanup paths.
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
---
sound/soc/fsl/fsl_sai.c | 43 ++++++++++++++++++++++++++++++++++-------
1 file changed, 36 insertions(+), 7 deletions(-)
diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index 87a40e2b9fdf..d6dd95680892 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -1374,6 +1374,31 @@ static int fsl_sai_check_version(struct device *dev)
return 0;
}
+static int fsl_sai_reset_hw(struct device *dev)
+{
+ struct fsl_sai *sai = dev_get_drvdata(dev);
+ unsigned char ofs = sai->soc_data->reg_offset;
+ int ret;
+
+ /*
+ * Clear TCSR/RCSR to reset SAI and disable all interrupts.
+ * Bootloader may leave SAI running causing interrupt storm.
+ */
+ ret = regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), 0);
+ if (ret) {
+ dev_err(dev, "Failed to clear TCSR: %d\n", ret);
+ return ret;
+ }
+
+ ret = regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), 0);
+ if (ret) {
+ dev_err(dev, "Failed to clear RCSR: %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
/*
* Calculate the offset between first two datalines, don't
* different offset in one case.
@@ -1580,13 +1605,6 @@ static int fsl_sai_probe(struct platform_device *pdev)
if (irq < 0)
return irq;
- ret = devm_request_irq(dev, irq, fsl_sai_isr, IRQF_SHARED,
- np->name, sai);
- if (ret) {
- dev_err(dev, "failed to claim irq %u\n", irq);
- return ret;
- }
-
memcpy(&sai->cpu_dai_drv, fsl_sai_dai_template,
sizeof(*fsl_sai_dai_template) * ARRAY_SIZE(fsl_sai_dai_template));
@@ -1661,6 +1679,10 @@ static int fsl_sai_probe(struct platform_device *pdev)
if (ret < 0)
dev_warn(dev, "Error reading SAI version: %d\n", ret);
+ ret = fsl_sai_reset_hw(dev);
+ if (ret < 0)
+ dev_warn(dev, "Failed to reset hardware: %d\n", ret);
+
/* Select MCLK direction */
if (sai->mclk_direction_output &&
sai->soc_data->max_register >= FSL_SAI_MCTL) {
@@ -1672,6 +1694,13 @@ static int fsl_sai_probe(struct platform_device *pdev)
if (ret < 0 && ret != -ENOSYS)
goto err_pm_get_sync;
+ ret = devm_request_irq(dev, irq, fsl_sai_isr, IRQF_SHARED,
+ np->name, sai);
+ if (ret) {
+ dev_err(dev, "failed to claim irq %u\n", irq);
+ goto err_pm_get_sync;
+ }
+
if (of_device_is_compatible(np, "fsl,imx952-sai") &&
!of_property_read_string(np, "fsl,sai-amix-mode", &str)) {
if (!strcmp(str, "bypass"))
--
2.34.1
^ permalink raw reply related
* Re: [PATCH] drivers/base/memory: make memory block get/put explicit
From: Donet Tom @ 2026-05-12 6:52 UTC (permalink / raw)
To: Muchun Song, David Hildenbrand, Oscar Salvador,
Greg Kroah-Hartman, Rafael J. Wysocki, Danilo Krummrich
Cc: Andrew Morton, Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Mike Rapoport, Suren Baghdasaryan, Michal Hocko,
Madhavan Srinivasan, Michael Ellerman, Nicholas Piggin,
Christophe Leroy (CS GROUP), Heiko Carstens, Vasily Gorbik,
Alexander Gordeev, Christian Borntraeger, Sven Schnelle, linux-mm,
driver-core, linux-kernel, linuxppc-dev, linux-s390, muchun.song
In-Reply-To: <20260511111800.2181785-1-songmuchun@bytedance.com>
On 5/11/26 4:48 PM, Muchun Song wrote:
> Rename the memory block lookup helper to make the acquired reference
> explicit, add memory_block_put() to wrap put_device(), and collapse the
> redundant section-number wrapper into a single block-id based lookup
> interface.
>
> This makes it clearer to callers that a successful lookup holds a
> reference that must be dropped, reducing the chance of forgetting the
> matching put and leaking the memory block device reference.
>
> Link: https://lore.kernel.org/linux-mm/7887915D-E598-42B3-9AFE-BFFBACE8DE2D@linux.dev/#t
> Signed-off-by: Muchun Song <songmuchun@bytedance.com>
> ---
> .../platforms/pseries/hotplug-memory.c | 14 ++-----
> drivers/base/memory.c | 38 +++++++------------
> drivers/base/node.c | 4 +-
> drivers/s390/char/sclp_mem.c | 17 ++++-----
> include/linux/memory.h | 7 +++-
> mm/memory_hotplug.c | 5 +--
> 6 files changed, 35 insertions(+), 50 deletions(-)
Hi
I did some basic DLPAR memory add/remove tests on PowerPC with this
patch, and it is working fine.
Initial memory
==============
[]# cat /proc/meminfo |grep -i MemTotal
MemTotal: 205169920 kB
After Add
=========
[]# cat /proc/meminfo |grep -i MemTotal
MemTotal: 247112960 kB
After Remove
============
[]# cat /proc/meminfo |grep -i MemTotal
MemTotal: 173729024 kB
[]#
Tested-by: Donet Tom <donettom@linux.ibm.com>
> diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
> index 75f85a5da981..94f3b57054b6 100644
> --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
> +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
> @@ -164,13 +164,7 @@ static int update_lmb_associativity_index(struct drmem_lmb *lmb)
>
> static struct memory_block *lmb_to_memblock(struct drmem_lmb *lmb)
> {
> - unsigned long section_nr;
> - struct memory_block *mem_block;
> -
> - section_nr = pfn_to_section_nr(PFN_DOWN(lmb->base_addr));
> -
> - mem_block = find_memory_block(section_nr);
> - return mem_block;
> + return memory_block_get(phys_to_block_id(lmb->base_addr));
> }
>
> static int get_lmb_range(u32 drc_index, int n_lmbs,
> @@ -220,7 +214,7 @@ static int dlpar_change_lmb_state(struct drmem_lmb *lmb, bool online)
> else
> rc = 0;
>
> - put_device(&mem_block->dev);
> + memory_block_put(mem_block);
>
> return rc;
> }
> @@ -319,12 +313,12 @@ static int dlpar_remove_lmb(struct drmem_lmb *lmb)
>
> rc = dlpar_offline_lmb(lmb);
> if (rc) {
> - put_device(&mem_block->dev);
> + memory_block_put(mem_block);
> return rc;
> }
>
> __remove_memory(lmb->base_addr, memory_block_size);
> - put_device(&mem_block->dev);
> + memory_block_put(mem_block);
>
> /* Update memory regions for memory remove */
> memblock_remove(lmb->base_addr, memory_block_size);
> diff --git a/drivers/base/memory.c b/drivers/base/memory.c
> index 11d57cfa8d72..5b5d41089e81 100644
> --- a/drivers/base/memory.c
> +++ b/drivers/base/memory.c
> @@ -649,7 +649,7 @@ int __weak arch_get_memory_phys_device(unsigned long start_pfn)
> *
> * Called under device_hotplug_lock.
> */
> -struct memory_block *find_memory_block_by_id(unsigned long block_id)
> +struct memory_block *memory_block_get(unsigned long block_id)
> {
> struct memory_block *mem;
>
> @@ -659,16 +659,6 @@ struct memory_block *find_memory_block_by_id(unsigned long block_id)
> return mem;
> }
>
> -/*
> - * Called under device_hotplug_lock.
> - */
> -struct memory_block *find_memory_block(unsigned long section_nr)
> -{
> - unsigned long block_id = memory_block_id(section_nr);
> -
> - return find_memory_block_by_id(block_id);
> -}
> -
> static struct attribute *memory_memblk_attrs[] = {
> &dev_attr_phys_index.attr,
> &dev_attr_state.attr,
> @@ -701,7 +691,7 @@ static int __add_memory_block(struct memory_block *memory)
>
> ret = device_register(&memory->dev);
> if (ret) {
> - put_device(&memory->dev);
> + memory_block_put(memory);
> return ret;
> }
> ret = xa_err(xa_store(&memory_blocks, memory->dev.id, memory,
> @@ -795,9 +785,9 @@ static int add_memory_block(unsigned long block_id, int nid, unsigned long state
> struct memory_block *mem;
> int ret = 0;
>
> - mem = find_memory_block_by_id(block_id);
> + mem = memory_block_get(block_id);
> if (mem) {
> - put_device(&mem->dev);
> + memory_block_put(mem);
> return -EEXIST;
> }
> mem = kzalloc_obj(*mem);
> @@ -845,8 +835,8 @@ static void remove_memory_block(struct memory_block *memory)
> memory->group = NULL;
> }
>
> - /* drop the ref. we got via find_memory_block() */
> - put_device(&memory->dev);
> + /* drop the ref. we got via memory_block_get() */
> + memory_block_put(memory);
> device_unregister(&memory->dev);
> }
>
> @@ -880,7 +870,7 @@ int create_memory_block_devices(unsigned long start, unsigned long size,
> end_block_id = block_id;
> for (block_id = start_block_id; block_id != end_block_id;
> block_id++) {
> - mem = find_memory_block_by_id(block_id);
> + mem = memory_block_get(block_id);
> if (WARN_ON_ONCE(!mem))
> continue;
> remove_memory_block(mem);
> @@ -908,7 +898,7 @@ void remove_memory_block_devices(unsigned long start, unsigned long size)
> return;
>
> for (block_id = start_block_id; block_id != end_block_id; block_id++) {
> - mem = find_memory_block_by_id(block_id);
> + mem = memory_block_get(block_id);
> if (WARN_ON_ONCE(!mem))
> continue;
> num_poisoned_pages_sub(-1UL, memblk_nr_poison(mem));
> @@ -1015,12 +1005,12 @@ int walk_memory_blocks(unsigned long start, unsigned long size,
> return 0;
>
> for (block_id = start_block_id; block_id <= end_block_id; block_id++) {
> - mem = find_memory_block_by_id(block_id);
> + mem = memory_block_get(block_id);
> if (!mem)
> continue;
>
> ret = func(mem, arg);
> - put_device(&mem->dev);
> + memory_block_put(mem);
> if (ret)
> break;
> }
> @@ -1228,22 +1218,22 @@ int walk_dynamic_memory_groups(int nid, walk_memory_groups_func_t func,
> void memblk_nr_poison_inc(unsigned long pfn)
> {
> const unsigned long block_id = pfn_to_block_id(pfn);
> - struct memory_block *mem = find_memory_block_by_id(block_id);
> + struct memory_block *mem = memory_block_get(block_id);
>
> if (mem) {
> atomic_long_inc(&mem->nr_hwpoison);
> - put_device(&mem->dev);
> + memory_block_put(mem);
> }
> }
>
> void memblk_nr_poison_sub(unsigned long pfn, long i)
> {
> const unsigned long block_id = pfn_to_block_id(pfn);
> - struct memory_block *mem = find_memory_block_by_id(block_id);
> + struct memory_block *mem = memory_block_get(block_id);
>
> if (mem) {
> atomic_long_sub(i, &mem->nr_hwpoison);
> - put_device(&mem->dev);
> + memory_block_put(mem);
> }
> }
>
> diff --git a/drivers/base/node.c b/drivers/base/node.c
> index 126f66aa2c3e..b3333ca92090 100644
> --- a/drivers/base/node.c
> +++ b/drivers/base/node.c
> @@ -847,13 +847,13 @@ static void register_memory_blocks_under_nodes(void)
> for (block_id = start_block_id; block_id <= end_block_id; block_id++) {
> struct memory_block *mem;
>
> - mem = find_memory_block_by_id(block_id);
> + mem = memory_block_get(block_id);
> if (!mem)
> continue;
>
> memory_block_add_nid_early(mem, nid);
> do_register_memory_block_under_node(nid, mem);
> - put_device(&mem->dev);
> + memory_block_put(mem);
> }
>
> }
> diff --git a/drivers/s390/char/sclp_mem.c b/drivers/s390/char/sclp_mem.c
> index 78c054e26d17..6df1926d4c62 100644
> --- a/drivers/s390/char/sclp_mem.c
> +++ b/drivers/s390/char/sclp_mem.c
> @@ -204,7 +204,7 @@ static ssize_t sclp_config_mem_store(struct kobject *kobj, struct kobj_attribute
> addr = sclp_mem->id * block_size;
> /*
> * Hold device_hotplug_lock when adding/removing memory blocks.
> - * Additionally, also protect calls to find_memory_block() and
> + * Additionally, also protect calls to memory_block_get() and
> * sclp_attach_storage().
> */
> rc = lock_device_hotplug_sysfs();
> @@ -231,20 +231,19 @@ static ssize_t sclp_config_mem_store(struct kobject *kobj, struct kobj_attribute
> sclp_mem_change_state(addr, block_size, 0);
> goto out_unlock;
> }
> - mem = find_memory_block(pfn_to_section_nr(PFN_DOWN(addr)));
> - put_device(&mem->dev);
> + mem = memory_block_get(phys_to_block_id(addr));
> + memory_block_put(mem);
> WRITE_ONCE(sclp_mem->config, 1);
> } else {
> if (!sclp_mem->config)
> goto out_unlock;
> - mem = find_memory_block(pfn_to_section_nr(PFN_DOWN(addr)));
> + mem = memory_block_get(phys_to_block_id(addr));
> if (mem->state != MEM_OFFLINE) {
> - put_device(&mem->dev);
> + memory_block_put(mem);
> rc = -EBUSY;
> goto out_unlock;
> }
> - /* drop the ref just got via find_memory_block() */
> - put_device(&mem->dev);
> + memory_block_put(mem);
> sclp_mem_change_state(addr, block_size, 0);
> __remove_memory(addr, block_size);
> #ifdef CONFIG_KASAN
> @@ -294,11 +293,11 @@ static ssize_t sclp_memmap_on_memory_store(struct kobject *kobj, struct kobj_att
> return rc;
> block_size = memory_block_size_bytes();
> sclp_mem = container_of(kobj, struct sclp_mem, kobj);
> - mem = find_memory_block(pfn_to_section_nr(PFN_DOWN(sclp_mem->id * block_size)));
> + mem = memory_block_get(phys_to_block_id(sclp_mem->id * block_size));
> if (!mem) {
> WRITE_ONCE(sclp_mem->memmap_on_memory, value);
> } else {
> - put_device(&mem->dev);
> + memory_block_put(mem);
> rc = -EBUSY;
> }
> unlock_device_hotplug();
> diff --git a/include/linux/memory.h b/include/linux/memory.h
> index 5bb5599c6b2b..29edef1f975c 100644
> --- a/include/linux/memory.h
> +++ b/include/linux/memory.h
> @@ -158,7 +158,11 @@ int create_memory_block_devices(unsigned long start, unsigned long size,
> void remove_memory_block_devices(unsigned long start, unsigned long size);
> extern void memory_dev_init(void);
> extern int memory_notify(enum memory_block_state state, void *v);
> -extern struct memory_block *find_memory_block(unsigned long section_nr);
> +extern struct memory_block *memory_block_get(unsigned long block_id);
> +static inline void memory_block_put(struct memory_block *mem)
> +{
> + put_device(&mem->dev);
> +}
> typedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);
> extern int walk_memory_blocks(unsigned long start, unsigned long size,
> void *arg, walk_memory_blocks_func_t func);
> @@ -171,7 +175,6 @@ struct memory_group *memory_group_find_by_id(int mgid);
> typedef int (*walk_memory_groups_func_t)(struct memory_group *, void *);
> int walk_dynamic_memory_groups(int nid, walk_memory_groups_func_t func,
> struct memory_group *excluded, void *arg);
> -struct memory_block *find_memory_block_by_id(unsigned long block_id);
> #define hotplug_memory_notifier(fn, pri) ({ \
> static __meminitdata struct notifier_block fn##_mem_nb =\
> { .notifier_call = fn, .priority = pri };\
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 462d8dcd636d..890c6453e887 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -1417,14 +1417,13 @@ static void remove_memory_blocks_and_altmaps(u64 start, u64 size)
> struct vmem_altmap *altmap = NULL;
> struct memory_block *mem;
>
> - mem = find_memory_block(pfn_to_section_nr(PFN_DOWN(cur_start)));
> + mem = memory_block_get(phys_to_block_id(cur_start));
> if (WARN_ON_ONCE(!mem))
> continue;
>
> altmap = mem->altmap;
> mem->altmap = NULL;
> - /* drop the ref. we got via find_memory_block() */
> - put_device(&mem->dev);
> + memory_block_put(mem);
>
> remove_memory_block_devices(cur_start, memblock_size);
>
>
> base-commit: e98d21c170b01ddef366f023bbfcf6b31509fa83
^ permalink raw reply
* Re: [PATCH] drivers/base/memory: make memory block get/put explicit
From: Muchun Song @ 2026-05-12 7:25 UTC (permalink / raw)
To: Donet Tom
Cc: Muchun Song, David Hildenbrand, Oscar Salvador,
Greg Kroah-Hartman, Rafael J. Wysocki, Danilo Krummrich,
Andrew Morton, Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Mike Rapoport, Suren Baghdasaryan, Michal Hocko,
Madhavan Srinivasan, Michael Ellerman, Nicholas Piggin,
Christophe Leroy (CS GROUP), Heiko Carstens, Vasily Gorbik,
Alexander Gordeev, Christian Borntraeger, Sven Schnelle, linux-mm,
driver-core, linux-kernel, linuxppc-dev, linux-s390
In-Reply-To: <943c5cd9-0796-45f5-9f8d-cb7e44457961@linux.ibm.com>
> On May 12, 2026, at 14:52, Donet Tom <donettom@linux.ibm.com> wrote:
>
> On 5/11/26 4:48 PM, Muchun Song wrote:
>
>> Rename the memory block lookup helper to make the acquired reference
>> explicit, add memory_block_put() to wrap put_device(), and collapse the
>> redundant section-number wrapper into a single block-id based lookup
>> interface.
>>
>> This makes it clearer to callers that a successful lookup holds a
>> reference that must be dropped, reducing the chance of forgetting the
>> matching put and leaking the memory block device reference.
>>
>> Link: https://lore.kernel.org/linux-mm/7887915D-E598-42B3-9AFE-BFFBACE8DE2D@linux.dev/#t
>> Signed-off-by: Muchun Song <songmuchun@bytedance.com>
>> ---
>> .../platforms/pseries/hotplug-memory.c | 14 ++-----
>> drivers/base/memory.c | 38 +++++++------------
>> drivers/base/node.c | 4 +-
>> drivers/s390/char/sclp_mem.c | 17 ++++-----
>> include/linux/memory.h | 7 +++-
>> mm/memory_hotplug.c | 5 +--
>> 6 files changed, 35 insertions(+), 50 deletions(-)
>
>
>
> Hi
>
> I did some basic DLPAR memory add/remove tests on PowerPC with this patch, and it is working fine.
>
> Initial memory
> ==============
> []# cat /proc/meminfo |grep -i MemTotal
> MemTotal: 205169920 kB
>
> After Add
> =========
> []# cat /proc/meminfo |grep -i MemTotal
> MemTotal: 247112960 kB
>
> After Remove
> ============
> []# cat /proc/meminfo |grep -i MemTotal
> MemTotal: 173729024 kB
> []#
>
> Tested-by: Donet Tom <donettom@linux.ibm.com>
Really thanks for your testing.
Thanks,
Muchun.
^ permalink raw reply
* Re: [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO
From: Michal Hocko @ 2026-05-12 7:45 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, sparclinux, linux-kernel, linux-mm,
linux-s390, linuxppc-dev
In-Reply-To: <20260511-bootmem_info_prep-v1-5-3fb0be6fc688@kernel.org>
On Mon 11-05-26 16:05:33, David Hildenbrand wrote:
> We removed the last user of NODE_INFO in commit 119c31caa59e ("mm/sparse:
> remove !CONFIG_SPARSEMEM_VMEMMAP leftovers for CONFIG_MEMORY_HOTPLUG").
>
> But it really was never used it besides for safety-checks ever since it was
> introduced in commit 04753278769f ("memory hotplug: register section/node
> id to free"), where we had the comment:
>
> 5) The node information like pgdat has similar issues. But, this
> will be able to be solved too by this.
> (Not implemented yet, but, remembering node id in the pages.)
>
> Of course, that never happened, and we are not planning on freeing the
> node data (pgdat/pglist_data), during memory hotunplug.
>
> So let's just stop marking the pgdat as NODE_INFO.
With the last user, shouldn't we simply drop NODE_INFO?
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
> ---
> mm/bootmem_info.c | 9 +--------
> 1 file changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
> index 74c1116626c8..cce1d560f094 100644
> --- a/mm/bootmem_info.c
> +++ b/mm/bootmem_info.c
> @@ -62,15 +62,8 @@ static void __init register_page_bootmem_info_section(unsigned long start_pfn)
>
> void __init register_page_bootmem_info_node(struct pglist_data *pgdat)
> {
> - unsigned long i, pfn, end_pfn, nr_pages;
> + unsigned long pfn, end_pfn;
> int node = pgdat->node_id;
> - struct page *page;
> -
> - nr_pages = PAGE_ALIGN(sizeof(struct pglist_data)) >> PAGE_SHIFT;
> - page = virt_to_page(pgdat);
> -
> - for (i = 0; i < nr_pages; i++, page++)
> - get_page_bootmem(node, page, NODE_INFO);
>
> pfn = pgdat->node_start_pfn;
> end_pfn = pgdat_end_pfn(pgdat);
>
> --
> 2.43.0
>
--
Michal Hocko
SUSE Labs
^ permalink raw reply
* Re: [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1)
From: Michal Hocko @ 2026-05-12 7:46 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, sparclinux, linux-kernel, linux-mm,
linux-s390, linuxppc-dev
In-Reply-To: <20260511-bootmem_info_prep-v1-0-3fb0be6fc688@kernel.org>
On Mon 11-05-26 16:05:28, David Hildenbrand wrote:
> We want to remove CONFIG_HAVE_BOOTMEM_INFO_NODE. As a first step,
> let's limit the remaining harm to x86 and core code, removing
> sparc, ppc and s390 leftovers, starting the stepwise removal by removing
> and simplifying some code.
>
> Once a related x86 vmemmap fix [1] is in, we can merge part 2 that will
> remove CONFIG_HAVE_BOOTMEM_INFO_NODE entirely.
>
> Tested on x86-64 with hugetlb vmemmap optimization in combination with
> KMEMLEAK, making sure that the problem reported in dd0ff4d12dd2 ("bootmem:
> remove the vmemmap pages from kmemleak in put_page_bootmem") does not
> reappear -- hoping I managed to trigger the original problem.
>
> Heavily cross-compiled, but let's let build bots run on it for a bit.
>
> [1] https://lore.kernel.org/r/20260429-vmemmap-v2-1-8dfcacffd877@kernel.org
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
> ---
> David Hildenbrand (Arm) (8):
> sparc/mm: remove register_page_bootmem_info()
> mm/bootmem_info: drop initialization of page->lru
> mm/bootmem_info: stop using PG_private
> mm/bootmem_info: remove call to kmemleak_free_part_phys()
> mm/bootmem_info: stop marking the pgdat as NODE_INFO
> mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO
> s390/mm: use free_reserved_page() in vmem_free_pages()
> powerpc/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE
>
> arch/powerpc/mm/init_64.c | 8 --------
> arch/s390/mm/vmem.c | 3 +--
> arch/sparc/mm/init_64.c | 20 --------------------
> include/linux/bootmem_info.h | 1 -
> mm/Kconfig | 2 +-
> mm/bootmem_info.c | 25 ++-----------------------
> 6 files changed, 4 insertions(+), 55 deletions(-)
Good clean up. Feel free to add
Acked-by: Michal Hocko <mhocko@suse.com>
to all patches but kmemleak one which I do not feel qualified to judge.
Thanks!
--
Michal Hocko
SUSE Labs
^ permalink raw reply
* Re: [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO
From: David Hildenbrand (Arm) @ 2026-05-12 7:47 UTC (permalink / raw)
To: Michal Hocko
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, sparclinux, linux-kernel, linux-mm,
linux-s390, linuxppc-dev
In-Reply-To: <agLai5lr0CQRZLBK@tiehlicka>
On 5/12/26 09:45, Michal Hocko wrote:
> On Mon 11-05-26 16:05:33, David Hildenbrand wrote:
>> We removed the last user of NODE_INFO in commit 119c31caa59e ("mm/sparse:
>> remove !CONFIG_SPARSEMEM_VMEMMAP leftovers for CONFIG_MEMORY_HOTPLUG").
>>
>> But it really was never used it besides for safety-checks ever since it was
>> introduced in commit 04753278769f ("memory hotplug: register section/node
>> id to free"), where we had the comment:
>>
>> 5) The node information like pgdat has similar issues. But, this
>> will be able to be solved too by this.
>> (Not implemented yet, but, remembering node id in the pages.)
>>
>> Of course, that never happened, and we are not planning on freeing the
>> node data (pgdat/pglist_data), during memory hotunplug.
>>
>> So let's just stop marking the pgdat as NODE_INFO.
>
> With the last user, shouldn't we simply drop NODE_INFO?
I'll drop the whole thing in part 2.
I actually had both parts together until I stumbled into the vmmemmap x86
freeing issue that now causes conflicts until upstream and synced to the MM tree.
--
Cheers,
David
^ permalink raw reply
* Re: [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1)
From: David Hildenbrand (Arm) @ 2026-05-12 7:48 UTC (permalink / raw)
To: Michal Hocko
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, sparclinux, linux-kernel, linux-mm,
linux-s390, linuxppc-dev
In-Reply-To: <agLawTyWlnuC9Rz1@tiehlicka>
On 5/12/26 09:46, Michal Hocko wrote:
> On Mon 11-05-26 16:05:28, David Hildenbrand wrote:
>> We want to remove CONFIG_HAVE_BOOTMEM_INFO_NODE. As a first step,
>> let's limit the remaining harm to x86 and core code, removing
>> sparc, ppc and s390 leftovers, starting the stepwise removal by removing
>> and simplifying some code.
>>
>> Once a related x86 vmemmap fix [1] is in, we can merge part 2 that will
>> remove CONFIG_HAVE_BOOTMEM_INFO_NODE entirely.
>>
>> Tested on x86-64 with hugetlb vmemmap optimization in combination with
>> KMEMLEAK, making sure that the problem reported in dd0ff4d12dd2 ("bootmem:
>> remove the vmemmap pages from kmemleak in put_page_bootmem") does not
>> reappear -- hoping I managed to trigger the original problem.
>>
>> Heavily cross-compiled, but let's let build bots run on it for a bit.
>>
>> [1] https://lore.kernel.org/r/20260429-vmemmap-v2-1-8dfcacffd877@kernel.org
>>
>> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
>> ---
>> David Hildenbrand (Arm) (8):
>> sparc/mm: remove register_page_bootmem_info()
>> mm/bootmem_info: drop initialization of page->lru
>> mm/bootmem_info: stop using PG_private
>> mm/bootmem_info: remove call to kmemleak_free_part_phys()
>> mm/bootmem_info: stop marking the pgdat as NODE_INFO
>> mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO
>> s390/mm: use free_reserved_page() in vmem_free_pages()
>> powerpc/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE
>>
>> arch/powerpc/mm/init_64.c | 8 --------
>> arch/s390/mm/vmem.c | 3 +--
>> arch/sparc/mm/init_64.c | 20 --------------------
>> include/linux/bootmem_info.h | 1 -
>> mm/Kconfig | 2 +-
>> mm/bootmem_info.c | 25 ++-----------------------
>> 6 files changed, 4 insertions(+), 55 deletions(-)
>
> Good clean up. Feel free to add
> Acked-by: Michal Hocko <mhocko@suse.com>
Thanks!
> to all patches but kmemleak one which I do not feel qualified to judge.
It's black magic to me as well. I tried to test that scenario in particular and
was not able to trigger the problem.
--
Cheers,
David
^ permalink raw reply
* Re: [PATCH 1/8] sparc/mm: remove register_page_bootmem_info()
From: Oscar Salvador @ 2026-05-12 8:28 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
In-Reply-To: <20260511-bootmem_info_prep-v1-1-3fb0be6fc688@kernel.org>
On Mon, May 11, 2026 at 04:05:29PM +0200, David Hildenbrand (Arm) wrote:
> sparc does not select CONFIG_HAVE_BOOTMEM_INFO_NODE, therefore,
> register_page_bootmem_info_node() is a nop.
>
> Let's just get rid of register_page_bootmem_info().
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply
* Re: [PATCH 2/8] mm/bootmem_info: drop initialization of page->lru
From: Oscar Salvador @ 2026-05-12 8:28 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
In-Reply-To: <20260511-bootmem_info_prep-v1-2-3fb0be6fc688@kernel.org>
On Mon, May 11, 2026 at 04:05:30PM +0200, David Hildenbrand (Arm) wrote:
> In the past, we used to store the type in page->lru.next, introduced by
> commit 5f24ce5fd34c ("thp: remove PG_buddy"). The location changed over
> the years; ever since commit 0386aaa6e9c8 ("bootmem: stop using
> page->index"), we store it alongside the info in page->private.
>
> Consequently, there is no need to reset page->lru anymore.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply
* Re: [PATCH 3/8] mm/bootmem_info: stop using PG_private
From: Oscar Salvador @ 2026-05-12 8:30 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
In-Reply-To: <20260511-bootmem_info_prep-v1-3-3fb0be6fc688@kernel.org>
On Mon, May 11, 2026 at 04:05:31PM +0200, David Hildenbrand (Arm) wrote:
> Nobody checks PG_private for these pages, and we can happily use
> set_page_private() without setting PG_private. So let's just stop
> setting/clearing PG_private.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply
* Re: [PATCH 4/8] mm/bootmem_info: remove call to kmemleak_free_part_phys()
From: Oscar Salvador @ 2026-05-12 8:34 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
In-Reply-To: <20260511-bootmem_info_prep-v1-4-3fb0be6fc688@kernel.org>
On Mon, May 11, 2026 at 04:05:32PM +0200, David Hildenbrand (Arm) wrote:
> The call to kmemleak_free_part_phys() was added in 2022 in
> commit dd0ff4d12dd2 ("bootmem: remove the vmemmap pages from kmemleak in
> put_page_bootmem").
>
> In 2025, commit b2aad24b5333 ("mm/memmap: prevent double scanning of memmap
> by kmemleak") started to use MEMBLOCK_ALLOC_NOLEAKTRACE when allocating
> the memmap to skip the kmemleak_alloc_phys() in the buddy.
>
> So remove the call to kmemleak_free_part_phys(). If this would still
> be required for other purposes, either free_reserved_page() should take
> care of it, or selected users.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
> ---
> include/linux/bootmem_info.h | 1 -
> mm/bootmem_info.c | 1 -
> 2 files changed, 2 deletions(-)
>
> diff --git a/include/linux/bootmem_info.h b/include/linux/bootmem_info.h
> index 492ceeb1cdf8..f724340755e5 100644
> --- a/include/linux/bootmem_info.h
> +++ b/include/linux/bootmem_info.h
> @@ -82,7 +82,6 @@ static inline void get_page_bootmem(unsigned long info, struct page *page,
>
> static inline void free_bootmem_page(struct page *page)
> {
> - kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
> free_reserved_page(page);
> }
> #endif
> diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
> index 6e2aaab3dca9..74c1116626c8 100644
> --- a/mm/bootmem_info.c
> +++ b/mm/bootmem_info.c
> @@ -32,7 +32,6 @@ void put_page_bootmem(struct page *page)
>
> if (page_ref_dec_return(page) == 1) {
> set_page_private(page, 0);
> - kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
A bit odd that kmemleak_free_part_phys() did not complain if we never
did kmemleak_alloc_phys() for these pages?
--
Oscar Salvador
SUSE Labs
^ permalink raw reply
* Re: [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO
From: Oscar Salvador @ 2026-05-12 8:36 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
In-Reply-To: <20260511-bootmem_info_prep-v1-5-3fb0be6fc688@kernel.org>
On Mon, May 11, 2026 at 04:05:33PM +0200, David Hildenbrand (Arm) wrote:
> We removed the last user of NODE_INFO in commit 119c31caa59e ("mm/sparse:
> remove !CONFIG_SPARSEMEM_VMEMMAP leftovers for CONFIG_MEMORY_HOTPLUG").
>
> But it really was never used it besides for safety-checks ever since it was
> introduced in commit 04753278769f ("memory hotplug: register section/node
> id to free"), where we had the comment:
>
> 5) The node information like pgdat has similar issues. But, this
> will be able to be solved too by this.
> (Not implemented yet, but, remembering node id in the pages.)
>
> Of course, that never happened, and we are not planning on freeing the
> node data (pgdat/pglist_data), during memory hotunplug.
>
> So let's just stop marking the pgdat as NODE_INFO.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply
* Re: [PATCH v2] KVM: PPC: Book3S HV: Add H_FAC_UNAVAIL mapping for tracing exits
From: Vaibhav Jain @ 2026-05-12 8:36 UTC (permalink / raw)
To: Gautam Menghani, maddy, npiggin, mpe, chleroy
Cc: Gautam Menghani, linuxppc-dev, kvm, linux-kernel
In-Reply-To: <20260428084534.49781-1-Gautam.Menghani@ibm.com>
Thanks Gautam catching this and proposing this patch.
Minor review comments below:
Gautam Menghani <Gautam.Menghani@ibm.com> writes:
> From: Gautam Menghani <gautam@linux.ibm.com>
>
> The macro kvm_trace_symbol_exit is used for providing the mappings
> for the trap vectors and their names. Add mapping for H_FAC_UNAVAIL so that
> trap reason is displayed as string instead of a vector number when using
> the kvm_guest_exit tracepoint.
>
> Signed-off-by: Gautam Menghani <gautam@linux.ibm.com>
> ---
> v2:
> 1. Remove the trailing comma after last element
>
> arch/powerpc/kvm/trace_book3s.h | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/kvm/trace_book3s.h b/arch/powerpc/kvm/trace_book3s.h
> index 9260ddbd557f..5d272c115331 100644
> --- a/arch/powerpc/kvm/trace_book3s.h
> +++ b/arch/powerpc/kvm/trace_book3s.h
> @@ -28,6 +28,7 @@
> {0xea0, "H_VIRT"}, \
> {0xf00, "PERFMON"}, \
> {0xf20, "ALTIVEC"}, \
> - {0xf40, "VSX"}
> + {0xf40, "VSX"}, \
> + {0xf80, "H_FAC_UNAVAIL"}
Also add trap of 0x000 indicating "RETURN_TO_HOST"
Also sychronize the contents of the proposed changes for this header with the
libtraceevent header file tools/perf/util/kvm-stat-arch/book3s_hv_exits.h
>
> #endif
> --
> 2.52.0
>
>
With above minor fixes done, feel free to add:
Reviewed-by: Vaibhav Jain (IBM) <vaibhav@linux.ibm.com>
--
Cheers
~ Vaibhav
^ permalink raw reply
* Re: [PATCH 6/8] mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO
From: Oscar Salvador @ 2026-05-12 8:37 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
In-Reply-To: <20260511-bootmem_info_prep-v1-6-3fb0be6fc688@kernel.org>
On Mon, May 11, 2026 at 04:05:34PM +0200, David Hildenbrand (Arm) wrote:
> We never free the ms->usage data for boot memory sections (see
> section_deactivate()). And to identify whether ms->usage was allocated
> from memblock, we simply identify it by looking at PG_reserved.
>
> Consequently, there is no need to mark ms->usage as MIX_SECTION_INFO.
> Let's just stop doing that.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply
* Re: [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages()
From: Oscar Salvador @ 2026-05-12 8:38 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
In-Reply-To: <20260511-bootmem_info_prep-v1-7-3fb0be6fc688@kernel.org>
On Mon, May 11, 2026 at 04:05:35PM +0200, David Hildenbrand (Arm) wrote:
> We never select CONFIG_HAVE_BOOTMEM_INFO_NODE on s390. Therefore,
> free_bootmem_page() nowadays always translates to free_reserved_page().
>
> Let's use free_reserved_page() to replace the free_bootmem_page() loop.
> We can stop including bootmem_info.h.
>
> Likely, vmemmap freeing code could be factored out into the core in the
> future.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply
* Re: [PATCH 8/8] powerpc/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE
From: Oscar Salvador @ 2026-05-12 8:43 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
In-Reply-To: <20260511-bootmem_info_prep-v1-8-3fb0be6fc688@kernel.org>
On Mon, May 11, 2026 at 04:05:36PM +0200, David Hildenbrand (Arm) wrote:
> register_page_bootmem_info_node() essentially only calls
> register_page_bootmem_memmap(). However, on powerpc that function is a
> nop. So there is not benefit in using CONFIG_HAVE_BOOTMEM_INFO_NODE
> anymore, let's just drop it.
>
> We can stop including bootmem_info.h.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
> ---
> arch/powerpc/mm/init_64.c | 8 --------
> mm/Kconfig | 2 +-
> 2 files changed, 1 insertion(+), 9 deletions(-)
>
> diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
> index b6f3ae03ca9e..64f0df5bb5cd 100644
> --- a/arch/powerpc/mm/init_64.c
> +++ b/arch/powerpc/mm/init_64.c
> @@ -41,7 +41,6 @@
> #include <linux/libfdt.h>
> #include <linux/memremap.h>
> #include <linux/memory.h>
> -#include <linux/bootmem_info.h>
>
> #include <asm/pgalloc.h>
> #include <asm/page.h>
> @@ -388,13 +387,6 @@ void __ref vmemmap_free(unsigned long start, unsigned long end,
>
> #endif
>
> -#ifdef CONFIG_HAVE_BOOTMEM_INFO_NODE
> -void register_page_bootmem_memmap(unsigned long section_nr,
> - struct page *start_page, unsigned long size)
> -{
> -}
> -#endif /* CONFIG_HAVE_BOOTMEM_INFO_NODE */
> -
> #endif /* CONFIG_SPARSEMEM_VMEMMAP */
>
> #ifdef CONFIG_PPC_BOOK3S_64
> diff --git a/mm/Kconfig b/mm/Kconfig
> index e221fa1dc54d..97b079372325 100644
> --- a/mm/Kconfig
> +++ b/mm/Kconfig
> @@ -537,7 +537,7 @@ endchoice
>
> config MEMORY_HOTREMOVE
> bool "Allow for memory hot remove"
> - select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
> + select HAVE_BOOTMEM_INFO_NODE if X86_64
> depends on MEMORY_HOTPLUG
> select MIGRATION
>
>
> --
> 2.43.0
>
>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply
* Re: [PATCH 4/8] mm/bootmem_info: remove call to kmemleak_free_part_phys()
From: David Hildenbrand (Arm) @ 2026-05-12 8:45 UTC (permalink / raw)
To: Oscar Salvador
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
In-Reply-To: <agLmKu3IpGS3FtmX@localhost.localdomain>
On 5/12/26 10:34, Oscar Salvador wrote:
> On Mon, May 11, 2026 at 04:05:32PM +0200, David Hildenbrand (Arm) wrote:
>> The call to kmemleak_free_part_phys() was added in 2022 in
>> commit dd0ff4d12dd2 ("bootmem: remove the vmemmap pages from kmemleak in
>> put_page_bootmem").
>>
>> In 2025, commit b2aad24b5333 ("mm/memmap: prevent double scanning of memmap
>> by kmemleak") started to use MEMBLOCK_ALLOC_NOLEAKTRACE when allocating
>> the memmap to skip the kmemleak_alloc_phys() in the buddy.
>>
>> So remove the call to kmemleak_free_part_phys(). If this would still
>> be required for other purposes, either free_reserved_page() should take
>> care of it, or selected users.
>>
>> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
>
> Reviewed-by: Oscar Salvador <osalvador@suse.de>
>
>> ---
>> include/linux/bootmem_info.h | 1 -
>> mm/bootmem_info.c | 1 -
>> 2 files changed, 2 deletions(-)
>>
>> diff --git a/include/linux/bootmem_info.h b/include/linux/bootmem_info.h
>> index 492ceeb1cdf8..f724340755e5 100644
>> --- a/include/linux/bootmem_info.h
>> +++ b/include/linux/bootmem_info.h
>> @@ -82,7 +82,6 @@ static inline void get_page_bootmem(unsigned long info, struct page *page,
>>
>> static inline void free_bootmem_page(struct page *page)
>> {
>> - kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
>> free_reserved_page(page);
>> }
>> #endif
>> diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
>> index 6e2aaab3dca9..74c1116626c8 100644
>> --- a/mm/bootmem_info.c
>> +++ b/mm/bootmem_info.c
>> @@ -32,7 +32,6 @@ void put_page_bootmem(struct page *page)
>>
>> if (page_ref_dec_return(page) == 1) {
>> set_page_private(page, 0);
>> - kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
>
> A bit odd that kmemleak_free_part_phys() did not complain if we never
> did kmemleak_alloc_phys() for these pages?
delete_object_part() calls __find_and_remove_object() and essentially just skips
if it didn't find anything.
Maybe the kmemleak_warn() would trigger, but it's guarded by "#ifdef DEBUG" ...
--
Cheers,
David
^ 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