From e70d6e9a39d93de14de3f61fae766a7bc3f288d0 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 19 Jun 2024 11:52:59 +0200 Subject: [PATCH] 5.10-stable patches added patches: hugetlb_encode.h-fix-undefined-behaviour-34-26.patch serial-8250_pxa-configure-tx_loadsz-to-match-fifo-irq-level.patch --- ...code.h-fix-undefined-behaviour-34-26.patch | 97 +++++++++++++++++++ ...re-tx_loadsz-to-match-fifo-irq-level.patch | 35 +++++++ queue-5.10/series | 2 + 3 files changed, 134 insertions(+) create mode 100644 queue-5.10/hugetlb_encode.h-fix-undefined-behaviour-34-26.patch create mode 100644 queue-5.10/serial-8250_pxa-configure-tx_loadsz-to-match-fifo-irq-level.patch diff --git a/queue-5.10/hugetlb_encode.h-fix-undefined-behaviour-34-26.patch b/queue-5.10/hugetlb_encode.h-fix-undefined-behaviour-34-26.patch new file mode 100644 index 00000000000..c897423c1bc --- /dev/null +++ b/queue-5.10/hugetlb_encode.h-fix-undefined-behaviour-34-26.patch @@ -0,0 +1,97 @@ +From 710bb68c2e3a24512e2d2bae470960d7488e97b1 Mon Sep 17 00:00:00 2001 +From: Matthias Goergens +Date: Mon, 5 Sep 2022 11:19:04 +0800 +Subject: hugetlb_encode.h: fix undefined behaviour (34 << 26) + +From: Matthias Goergens + +commit 710bb68c2e3a24512e2d2bae470960d7488e97b1 upstream. + +Left-shifting past the size of your datatype is undefined behaviour in C. +The literal 34 gets the type `int`, and that one is not big enough to be +left shifted by 26 bits. + +An `unsigned` is long enough (on any machine that has at least 32 bits for +their ints.) + +For uniformity, we mark all the literals as unsigned. But it's only +really needed for HUGETLB_FLAG_ENCODE_16GB. + +Thanks to Randy Dunlap for an initial review and suggestion. + +Link: https://lkml.kernel.org/r/20220905031904.150925-1-matthias.goergens@gmail.com +Signed-off-by: Matthias Goergens +Acked-by: Randy Dunlap +Cc: Mike Kravetz +Cc: Muchun Song +Signed-off-by: Andrew Morton +[cmllamas: fix trivial conflict due to missing page encondigs] +Signed-off-by: Carlos Llamas +Signed-off-by: Greg Kroah-Hartman +--- + include/uapi/asm-generic/hugetlb_encode.h | 26 +++++++++++++------------- + tools/include/asm-generic/hugetlb_encode.h | 20 ++++++++++---------- + 2 files changed, 23 insertions(+), 23 deletions(-) + +--- a/include/uapi/asm-generic/hugetlb_encode.h ++++ b/include/uapi/asm-generic/hugetlb_encode.h +@@ -20,18 +20,18 @@ + #define HUGETLB_FLAG_ENCODE_SHIFT 26 + #define HUGETLB_FLAG_ENCODE_MASK 0x3f + +-#define HUGETLB_FLAG_ENCODE_16KB (14 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_64KB (16 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_512KB (19 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_1MB (20 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_2MB (21 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_8MB (23 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_16MB (24 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_32MB (25 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_256MB (28 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_512MB (29 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_1GB (30 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_2GB (31 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_16GB (34 << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_16KB (14U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_64KB (16U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_512KB (19U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_1MB (20U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_2MB (21U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_8MB (23U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_16MB (24U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_32MB (25U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_256MB (28U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_512MB (29U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_1GB (30U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_2GB (31U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_16GB (34U << HUGETLB_FLAG_ENCODE_SHIFT) + + #endif /* _ASM_GENERIC_HUGETLB_ENCODE_H_ */ +--- a/tools/include/asm-generic/hugetlb_encode.h ++++ b/tools/include/asm-generic/hugetlb_encode.h +@@ -20,15 +20,15 @@ + #define HUGETLB_FLAG_ENCODE_SHIFT 26 + #define HUGETLB_FLAG_ENCODE_MASK 0x3f + +-#define HUGETLB_FLAG_ENCODE_64KB (16 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_512KB (19 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_1MB (20 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_2MB (21 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_8MB (23 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_16MB (24 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_256MB (28 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_1GB (30 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_2GB (31 << HUGETLB_FLAG_ENCODE_SHIFT) +-#define HUGETLB_FLAG_ENCODE_16GB (34 << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_64KB (16U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_512KB (19U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_1MB (20U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_2MB (21U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_8MB (23U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_16MB (24U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_256MB (28U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_1GB (30U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_2GB (31U << HUGETLB_FLAG_ENCODE_SHIFT) ++#define HUGETLB_FLAG_ENCODE_16GB (34U << HUGETLB_FLAG_ENCODE_SHIFT) + + #endif /* _ASM_GENERIC_HUGETLB_ENCODE_H_ */ diff --git a/queue-5.10/serial-8250_pxa-configure-tx_loadsz-to-match-fifo-irq-level.patch b/queue-5.10/serial-8250_pxa-configure-tx_loadsz-to-match-fifo-irq-level.patch new file mode 100644 index 00000000000..0412d09edc3 --- /dev/null +++ b/queue-5.10/serial-8250_pxa-configure-tx_loadsz-to-match-fifo-irq-level.patch @@ -0,0 +1,35 @@ +From 5208e7ced520a813b4f4774451fbac4e517e78b2 Mon Sep 17 00:00:00 2001 +From: Doug Brown +Date: Sun, 19 May 2024 12:19:30 -0700 +Subject: serial: 8250_pxa: Configure tx_loadsz to match FIFO IRQ level + +From: Doug Brown + +commit 5208e7ced520a813b4f4774451fbac4e517e78b2 upstream. + +The FIFO is 64 bytes, but the FCR is configured to fire the TX interrupt +when the FIFO is half empty (bit 3 = 0). Thus, we should only write 32 +bytes when a TX interrupt occurs. + +This fixes a problem observed on the PXA168 that dropped a bunch of TX +bytes during large transmissions. + +Fixes: ab28f51c77cd ("serial: rewrite pxa2xx-uart to use 8250_core") +Signed-off-by: Doug Brown +Link: https://lore.kernel.org/r/20240519191929.122202-1-doug@schmorgal.com +Cc: stable +Signed-off-by: Greg Kroah-Hartman +--- + drivers/tty/serial/8250/8250_pxa.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/tty/serial/8250/8250_pxa.c ++++ b/drivers/tty/serial/8250/8250_pxa.c +@@ -125,6 +125,7 @@ static int serial_pxa_probe(struct platf + uart.port.regshift = 2; + uart.port.irq = irq; + uart.port.fifosize = 64; ++ uart.tx_loadsz = 32; + uart.port.flags = UPF_IOREMAP | UPF_SKIP_TEST | UPF_FIXED_TYPE; + uart.port.dev = &pdev->dev; + uart.port.uartclk = clk_get_rate(data->clk); diff --git a/queue-5.10/series b/queue-5.10/series index ec845cfe528..0c07199552e 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -123,3 +123,5 @@ intel_th-pci-add-meteor-lake-s-support.patch intel_th-pci-add-lunar-lake-support.patch nilfs2-fix-potential-kernel-bug-due-to-lack-of-writeback-flag-waiting.patch tick-nohz_full-don-t-abuse-smp_call_function_single-in-tick_setup_device.patch +serial-8250_pxa-configure-tx_loadsz-to-match-fifo-irq-level.patch +hugetlb_encode.h-fix-undefined-behaviour-34-26.patch -- 2.47.3