From: Sasha Levin Date: Sat, 17 Jun 2023 00:33:43 +0000 (-0400) Subject: Fixes for 4.14 X-Git-Tag: v4.14.319~56 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7535624695499cd46390287b5b70b9ce04323d93;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.14 Signed-off-by: Sasha Levin --- diff --git a/queue-4.14/arm-dts-vexpress-add-missing-cache-properties.patch b/queue-4.14/arm-dts-vexpress-add-missing-cache-properties.patch new file mode 100644 index 00000000000..a05c424e8ee --- /dev/null +++ b/queue-4.14/arm-dts-vexpress-add-missing-cache-properties.patch @@ -0,0 +1,37 @@ +From faf859b10d31aabcc04ffbffc0ef8a35050d6bf7 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 23 Apr 2023 17:08:37 +0200 +Subject: ARM: dts: vexpress: add missing cache properties + +From: Krzysztof Kozlowski + +[ Upstream commit 328acc5657c6197753238d7ce0a6924ead829347 ] + +As all level 2 and level 3 caches are unified, add required +cache-unified property to fix warnings like: + + vexpress-v2p-ca5s.dtb: cache-controller@2c0f0000: 'cache-unified' is a required property + +Signed-off-by: Krzysztof Kozlowski +Link: https://lore.kernel.org/r/20230423150837.118466-1-krzysztof.kozlowski@linaro.org +Signed-off-by: Sudeep Holla +Signed-off-by: Sasha Levin +--- + arch/arm/boot/dts/vexpress-v2p-ca5s.dts | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/arm/boot/dts/vexpress-v2p-ca5s.dts b/arch/arm/boot/dts/vexpress-v2p-ca5s.dts +index 32f1906ffecfe..994edbc615cb0 100644 +--- a/arch/arm/boot/dts/vexpress-v2p-ca5s.dts ++++ b/arch/arm/boot/dts/vexpress-v2p-ca5s.dts +@@ -117,6 +117,7 @@ L2: cache-controller@2c0f0000 { + reg = <0x2c0f0000 0x1000>; + interrupts = <0 84 4>; + cache-level = <2>; ++ cache-unified; + }; + + pmu { +-- +2.39.2 + diff --git a/queue-4.14/mips-alchemy-fix-dbdma2.patch b/queue-4.14/mips-alchemy-fix-dbdma2.patch new file mode 100644 index 00000000000..7d5d4e4a181 --- /dev/null +++ b/queue-4.14/mips-alchemy-fix-dbdma2.patch @@ -0,0 +1,87 @@ +From 26b44877321d62f97d9fdd92f7b9e30730ed4b7d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 11 May 2023 17:30:10 +0200 +Subject: MIPS: Alchemy: fix dbdma2 + +From: Manuel Lauss + +[ Upstream commit 2d645604f69f3a772d58ead702f9a8e84ab2b342 ] + +Various fixes for the Au1200/Au1550/Au1300 DBDMA2 code: + +- skip cache invalidation if chip has working coherency circuitry. +- invalidate KSEG0-portion of the (physical) data address. +- force the dma channel doorbell write out to bus immediately with + a sync. + +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Sasha Levin +--- + arch/mips/alchemy/common/dbdma.c | 27 +++++++++++++++------------ + 1 file changed, 15 insertions(+), 12 deletions(-) + +diff --git a/arch/mips/alchemy/common/dbdma.c b/arch/mips/alchemy/common/dbdma.c +index fc482d900dddb..122f8c0d258ef 100644 +--- a/arch/mips/alchemy/common/dbdma.c ++++ b/arch/mips/alchemy/common/dbdma.c +@@ -30,6 +30,7 @@ + * + */ + ++#include /* for dma_default_coherent */ + #include + #include + #include +@@ -623,17 +624,18 @@ u32 au1xxx_dbdma_put_source(u32 chanid, dma_addr_t buf, int nbytes, u32 flags) + dp->dscr_cmd0 &= ~DSCR_CMD0_IE; + + /* +- * There is an errata on the Au1200/Au1550 parts that could result +- * in "stale" data being DMA'ed. It has to do with the snoop logic on +- * the cache eviction buffer. DMA_NONCOHERENT is on by default for +- * these parts. If it is fixed in the future, these dma_cache_inv will +- * just be nothing more than empty macros. See io.h. ++ * There is an erratum on certain Au1200/Au1550 revisions that could ++ * result in "stale" data being DMA'ed. It has to do with the snoop ++ * logic on the cache eviction buffer. dma_default_coherent is set ++ * to false on these parts. + */ +- dma_cache_wback_inv((unsigned long)buf, nbytes); ++ if (!dma_default_coherent) ++ dma_cache_wback_inv(KSEG0ADDR(buf), nbytes); + dp->dscr_cmd0 |= DSCR_CMD0_V; /* Let it rip */ + wmb(); /* drain writebuffer */ + dma_cache_wback_inv((unsigned long)dp, sizeof(*dp)); + ctp->chan_ptr->ddma_dbell = 0; ++ wmb(); /* force doorbell write out to dma engine */ + + /* Get next descriptor pointer. */ + ctp->put_ptr = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr)); +@@ -685,17 +687,18 @@ u32 au1xxx_dbdma_put_dest(u32 chanid, dma_addr_t buf, int nbytes, u32 flags) + dp->dscr_source1, dp->dscr_dest0, dp->dscr_dest1); + #endif + /* +- * There is an errata on the Au1200/Au1550 parts that could result in +- * "stale" data being DMA'ed. It has to do with the snoop logic on the +- * cache eviction buffer. DMA_NONCOHERENT is on by default for these +- * parts. If it is fixed in the future, these dma_cache_inv will just +- * be nothing more than empty macros. See io.h. ++ * There is an erratum on certain Au1200/Au1550 revisions that could ++ * result in "stale" data being DMA'ed. It has to do with the snoop ++ * logic on the cache eviction buffer. dma_default_coherent is set ++ * to false on these parts. + */ +- dma_cache_inv((unsigned long)buf, nbytes); ++ if (!dma_default_coherent) ++ dma_cache_inv(KSEG0ADDR(buf), nbytes); + dp->dscr_cmd0 |= DSCR_CMD0_V; /* Let it rip */ + wmb(); /* drain writebuffer */ + dma_cache_wback_inv((unsigned long)dp, sizeof(*dp)); + ctp->chan_ptr->ddma_dbell = 0; ++ wmb(); /* force doorbell write out to dma engine */ + + /* Get next descriptor pointer. */ + ctp->put_ptr = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr)); +-- +2.39.2 + diff --git a/queue-4.14/mips-move-initrd_start-check-after-initrd-address-sa.patch b/queue-4.14/mips-move-initrd_start-check-after-initrd-address-sa.patch new file mode 100644 index 00000000000..ca7119f7415 --- /dev/null +++ b/queue-4.14/mips-move-initrd_start-check-after-initrd-address-sa.patch @@ -0,0 +1,52 @@ +From 10ab79e823e6ca26f4141871e071d6563ab68223 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 9 May 2023 18:29:21 +0100 +Subject: mips: Move initrd_start check after initrd address sanitisation. + +From: Liviu Dudau + +[ Upstream commit 4897a898a216058dec55e5e5902534e6e224fcdf ] + +PAGE_OFFSET is technically a virtual address so when checking the value of +initrd_start against it we should make sure that it has been sanitised from +the values passed by the bootloader. Without this change, even with a bootloader +that passes correct addresses for an initrd, we are failing to load it on MT7621 +boards, for example. + +Signed-off-by: Liviu Dudau +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Sasha Levin +--- + arch/mips/kernel/setup.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c +index abd7ee9e90ab0..d205d3875e2c2 100644 +--- a/arch/mips/kernel/setup.c ++++ b/arch/mips/kernel/setup.c +@@ -257,10 +257,6 @@ static unsigned long __init init_initrd(void) + pr_err("initrd start must be page aligned\n"); + goto disable; + } +- if (initrd_start < PAGE_OFFSET) { +- pr_err("initrd start < PAGE_OFFSET\n"); +- goto disable; +- } + + /* + * Sanitize initrd addresses. For example firmware +@@ -273,6 +269,11 @@ static unsigned long __init init_initrd(void) + initrd_end = (unsigned long)__va(end); + initrd_start = (unsigned long)__va(__pa(initrd_start)); + ++ if (initrd_start < PAGE_OFFSET) { ++ pr_err("initrd start < PAGE_OFFSET\n"); ++ goto disable; ++ } ++ + ROOT_DEV = Root_RAM0; + return PFN_UP(end); + disable: +-- +2.39.2 + diff --git a/queue-4.14/mips-restore-au1300-support.patch b/queue-4.14/mips-restore-au1300-support.patch new file mode 100644 index 00000000000..d6192f92783 --- /dev/null +++ b/queue-4.14/mips-restore-au1300-support.patch @@ -0,0 +1,48 @@ +From 4fa31969c89a8e9d5aa751a8294fbe72a35810a1 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 10 May 2023 12:33:23 +0200 +Subject: MIPS: Restore Au1300 support + +From: Manuel Lauss + +[ Upstream commit f2041708dee30a3425f680265c337acd28293782 ] + +The Au1300, at least the one I have to test, uses the NetLogic vendor +ID, but commit 95b8a5e0111a ("MIPS: Remove NETLOGIC support") also +dropped Au1300 detection. Restore Au1300 detection. + +Tested on DB1300 with Au1380 chip. + +Signed-off-by: Manuel Lauss +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Sasha Levin +--- + arch/mips/kernel/cpu-probe.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c +index cf3fd549e16d0..f9368071a6bd9 100644 +--- a/arch/mips/kernel/cpu-probe.c ++++ b/arch/mips/kernel/cpu-probe.c +@@ -1686,6 +1686,10 @@ static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu) + break; + } + break; ++ case PRID_IMP_NETLOGIC_AU13XX: ++ c->cputype = CPU_ALCHEMY; ++ __cpu_name[cpu] = "Au1300"; ++ break; + } + } + +@@ -1988,6 +1992,7 @@ void cpu_probe(void) + cpu_probe_mips(c, cpu); + break; + case PRID_COMP_ALCHEMY: ++ case PRID_COMP_NETLOGIC: + cpu_probe_alchemy(c, cpu); + break; + case PRID_COMP_SIBYTE: +-- +2.39.2 + diff --git a/queue-4.14/power-supply-ab8500-fix-external_power_changed-race.patch b/queue-4.14/power-supply-ab8500-fix-external_power_changed-race.patch new file mode 100644 index 00000000000..99fadf74316 --- /dev/null +++ b/queue-4.14/power-supply-ab8500-fix-external_power_changed-race.patch @@ -0,0 +1,73 @@ +From 2a75febd07210a5be29e52c07f330aa177f3c3ee Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 15 Apr 2023 18:07:29 +0200 +Subject: power: supply: ab8500: Fix external_power_changed race + +From: Hans de Goede + +[ Upstream commit a5299ce4e96f3e8930e9c051b28d8093ada87b08 ] + +ab8500_btemp_external_power_changed() dereferences di->btemp_psy, +which gets sets in ab8500_btemp_probe() like this: + + di->btemp_psy = devm_power_supply_register(dev, &ab8500_btemp_desc, + &psy_cfg); + +As soon as devm_power_supply_register() has called device_add() +the external_power_changed callback can get called. So there is a window +where ab8500_btemp_external_power_changed() may get called while +di->btemp_psy has not been set yet leading to a NULL pointer dereference. + +Fixing this is easy. The external_power_changed callback gets passed +the power_supply which will eventually get stored in di->btemp_psy, +so ab8500_btemp_external_power_changed() can simply directly use +the passed in psy argument which is always valid. + +And the same applies to ab8500_fg_external_power_changed(). + +Signed-off-by: Hans de Goede +Reviewed-by: Linus Walleij +Signed-off-by: Sebastian Reichel +Signed-off-by: Sasha Levin +--- + drivers/power/supply/ab8500_btemp.c | 6 ++---- + drivers/power/supply/ab8500_fg.c | 6 ++---- + 2 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/drivers/power/supply/ab8500_btemp.c b/drivers/power/supply/ab8500_btemp.c +index 97423a04fc0f0..c58644a3345ce 100644 +--- a/drivers/power/supply/ab8500_btemp.c ++++ b/drivers/power/supply/ab8500_btemp.c +@@ -976,10 +976,8 @@ static int ab8500_btemp_get_ext_psy_data(struct device *dev, void *data) + */ + static void ab8500_btemp_external_power_changed(struct power_supply *psy) + { +- struct ab8500_btemp *di = power_supply_get_drvdata(psy); +- +- class_for_each_device(power_supply_class, NULL, +- di->btemp_psy, ab8500_btemp_get_ext_psy_data); ++ class_for_each_device(power_supply_class, NULL, psy, ++ ab8500_btemp_get_ext_psy_data); + } + + /* ab8500 btemp driver interrupts and their respective isr */ +diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c +index b00844103a07a..f99e248f6aed3 100644 +--- a/drivers/power/supply/ab8500_fg.c ++++ b/drivers/power/supply/ab8500_fg.c +@@ -2384,10 +2384,8 @@ static int ab8500_fg_init_hw_registers(struct ab8500_fg *di) + */ + static void ab8500_fg_external_power_changed(struct power_supply *psy) + { +- struct ab8500_fg *di = power_supply_get_drvdata(psy); +- +- class_for_each_device(power_supply_class, NULL, +- di->fg_psy, ab8500_fg_get_ext_psy_data); ++ class_for_each_device(power_supply_class, NULL, psy, ++ ab8500_fg_get_ext_psy_data); + } + + /** +-- +2.39.2 + diff --git a/queue-4.14/power-supply-bq27xxx-use-mod_delayed_work-instead-of.patch b/queue-4.14/power-supply-bq27xxx-use-mod_delayed_work-instead-of.patch new file mode 100644 index 00000000000..fb4fdb7efd4 --- /dev/null +++ b/queue-4.14/power-supply-bq27xxx-use-mod_delayed_work-instead-of.patch @@ -0,0 +1,40 @@ +From 045face0e19911afc895d1c5b13d38e2d4d81abc Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 15 Apr 2023 20:23:39 +0200 +Subject: power: supply: bq27xxx: Use mod_delayed_work() instead of cancel() + + schedule() + +From: Hans de Goede + +[ Upstream commit 59dddea9879713423c7b2ade43c423bb71e0d216 ] + +Use mod_delayed_work() instead of separate cancel_delayed_work_sync() + +schedule_delayed_work() calls. + +Signed-off-by: Hans de Goede +Signed-off-by: Sebastian Reichel +Signed-off-by: Sasha Levin +--- + drivers/power/supply/bq27xxx_battery.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/drivers/power/supply/bq27xxx_battery.c b/drivers/power/supply/bq27xxx_battery.c +index 49d351027d0e8..fb6c3f4023953 100644 +--- a/drivers/power/supply/bq27xxx_battery.c ++++ b/drivers/power/supply/bq27xxx_battery.c +@@ -832,10 +832,8 @@ static int poll_interval_param_set(const char *val, const struct kernel_param *k + return ret; + + mutex_lock(&bq27xxx_list_lock); +- list_for_each_entry(di, &bq27xxx_battery_devices, list) { +- cancel_delayed_work_sync(&di->work); +- schedule_delayed_work(&di->work, 0); +- } ++ list_for_each_entry(di, &bq27xxx_battery_devices, list) ++ mod_delayed_work(system_wq, &di->work, 0); + mutex_unlock(&bq27xxx_list_lock); + + return ret; +-- +2.39.2 + diff --git a/queue-4.14/power-supply-fix-logic-checking-if-system-is-running.patch b/queue-4.14/power-supply-fix-logic-checking-if-system-is-running.patch new file mode 100644 index 00000000000..8e46f963a2e --- /dev/null +++ b/queue-4.14/power-supply-fix-logic-checking-if-system-is-running.patch @@ -0,0 +1,66 @@ +From af08483d64ee56eb5262373cf5f95d8c6a099e10 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 16 May 2023 13:25:40 -0500 +Subject: power: supply: Fix logic checking if system is running from battery + +From: Mario Limonciello + +[ Upstream commit 95339f40a8b652b5b1773def31e63fc53c26378a ] + +The logic used for power_supply_is_system_supplied() counts all power +supplies and assumes that the system is running from AC if there is +either a non-battery power-supply reporting to be online or if no +power-supplies exist at all. + +The second rule is for desktop systems, that don't have any +battery/charger devices. These systems will incorrectly report to be +powered from battery once a device scope power-supply is registered +(e.g. a HID device), since these power-supplies increase the counter. + +Apart from HID devices, recent dGPUs provide UCSI power supplies on a +desktop systems. The dGPU by default doesn't have anything plugged in so +it's 'offline'. This makes power_supply_is_system_supplied() return 0 +with a count of 1 meaning all drivers that use this get a wrong judgement. + +To fix this case adjust the logic to also examine the scope of the power +supply. If the power supply is deemed a device power supply, then don't +count it. + +Cc: Evan Quan +Suggested-by: Lijo Lazar +Signed-off-by: Mario Limonciello +Signed-off-by: Sebastian Reichel +Signed-off-by: Sasha Levin +--- + drivers/power/supply/power_supply_core.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c +index 409ecff1a51a7..67766b500325f 100644 +--- a/drivers/power/supply/power_supply_core.c ++++ b/drivers/power/supply/power_supply_core.c +@@ -349,6 +349,10 @@ static int __power_supply_is_system_supplied(struct device *dev, void *data) + struct power_supply *psy = dev_get_drvdata(dev); + unsigned int *count = data; + ++ if (!psy->desc->get_property(psy, POWER_SUPPLY_PROP_SCOPE, &ret)) ++ if (ret.intval == POWER_SUPPLY_SCOPE_DEVICE) ++ return 0; ++ + (*count)++; + if (psy->desc->type != POWER_SUPPLY_TYPE_BATTERY) + if (!psy->desc->get_property(psy, POWER_SUPPLY_PROP_ONLINE, +@@ -367,8 +371,8 @@ int power_supply_is_system_supplied(void) + __power_supply_is_system_supplied); + + /* +- * If no power class device was found at all, most probably we are +- * running on a desktop system, so assume we are on mains power. ++ * If no system scope power class device was found at all, most probably we ++ * are running on a desktop system, so assume we are on mains power. + */ + if (count == 0) + return 1; +-- +2.39.2 + diff --git a/queue-4.14/power-supply-ratelimit-no-data-debug-output.patch b/queue-4.14/power-supply-ratelimit-no-data-debug-output.patch new file mode 100644 index 00000000000..006d0abf02a --- /dev/null +++ b/queue-4.14/power-supply-ratelimit-no-data-debug-output.patch @@ -0,0 +1,43 @@ +From 8b8ddcddc7eeb88e31780a773d526054e10be8ee Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 5 Mar 2023 21:52:26 +0100 +Subject: power: supply: Ratelimit no data debug output + +From: Marek Vasut + +[ Upstream commit 155c45a25679f571c2ae57d10db843a9dfc63430 ] + +Reduce the amount of output this dev_dbg() statement emits into logs, +otherwise if system software polls the sysfs entry for data and keeps +getting -ENODATA, it could end up filling the logs up. + +This does in fact make systemd journald choke, since during boot the +sysfs power supply entries are polled and if journald starts at the +same time, the journal is just being repeatedly filled up, and the +system stops on trying to start journald without booting any further. + +Signed-off-by: Marek Vasut +Reviewed-by: Hans de Goede +Signed-off-by: Sebastian Reichel +Signed-off-by: Sasha Levin +--- + drivers/power/supply/power_supply_sysfs.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c +index 2ccaf4ff4be47..2cb8a31e9dac0 100644 +--- a/drivers/power/supply/power_supply_sysfs.c ++++ b/drivers/power/supply/power_supply_sysfs.c +@@ -88,7 +88,8 @@ static ssize_t power_supply_show_property(struct device *dev, + + if (ret < 0) { + if (ret == -ENODATA) +- dev_dbg(dev, "driver has no data for `%s' property\n", ++ dev_dbg_ratelimited(dev, ++ "driver has no data for `%s' property\n", + attr->attr.name); + else if (ret != -ENODEV && ret != -EAGAIN) + dev_err_ratelimited(dev, +-- +2.39.2 + diff --git a/queue-4.14/regulator-fix-error-checking-for-debugfs_create_dir.patch b/queue-4.14/regulator-fix-error-checking-for-debugfs_create_dir.patch new file mode 100644 index 00000000000..6a5f0e29100 --- /dev/null +++ b/queue-4.14/regulator-fix-error-checking-for-debugfs_create_dir.patch @@ -0,0 +1,46 @@ +From aff76f16077804e6058bc3fadf46cee5061d6674 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 15 May 2023 22:29:38 +0500 +Subject: regulator: Fix error checking for debugfs_create_dir + +From: Osama Muhammad + +[ Upstream commit 2bf1c45be3b8f3a3f898d0756c1282f09719debd ] + +This patch fixes the error checking in core.c in debugfs_create_dir. +The correct way to check if an error occurred is 'IS_ERR' inline function. + +Signed-off-by: Osama Muhammad +--- + drivers/regulator/core.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c +index 871d657a161f0..7898a54a324c4 100644 +--- a/drivers/regulator/core.c ++++ b/drivers/regulator/core.c +@@ -3955,7 +3955,7 @@ static void rdev_init_debugfs(struct regulator_dev *rdev) + } + + rdev->debugfs = debugfs_create_dir(rname, debugfs_root); +- if (!rdev->debugfs) { ++ if (IS_ERR(rdev->debugfs)) { + rdev_warn(rdev, "Failed to create debugfs directory\n"); + return; + } +@@ -4513,7 +4513,7 @@ static int __init regulator_init(void) + ret = class_register(®ulator_class); + + debugfs_root = debugfs_create_dir("regulator", NULL); +- if (!debugfs_root) ++ if (IS_ERR(debugfs_root)) + pr_warn("regulator: Failed to create debugfs directory\n"); + + debugfs_create_file("supply_map", 0444, debugfs_root, NULL, +-- +2.39.2 + diff --git a/queue-4.14/series b/queue-4.14/series new file mode 100644 index 00000000000..e3a94687d42 --- /dev/null +++ b/queue-4.14/series @@ -0,0 +1,10 @@ +power-supply-ab8500-fix-external_power_changed-race.patch +power-supply-bq27xxx-use-mod_delayed_work-instead-of.patch +arm-dts-vexpress-add-missing-cache-properties.patch +power-supply-ratelimit-no-data-debug-output.patch +regulator-fix-error-checking-for-debugfs_create_dir.patch +power-supply-fix-logic-checking-if-system-is-running.patch +mips-restore-au1300-support.patch +mips-alchemy-fix-dbdma2.patch +mips-move-initrd_start-check-after-initrd-address-sa.patch +xen-blkfront-only-check-req_fua-for-writes.patch diff --git a/queue-4.14/xen-blkfront-only-check-req_fua-for-writes.patch b/queue-4.14/xen-blkfront-only-check-req_fua-for-writes.patch new file mode 100644 index 00000000000..c1e678daa93 --- /dev/null +++ b/queue-4.14/xen-blkfront-only-check-req_fua-for-writes.patch @@ -0,0 +1,45 @@ +From 7b3b836dba2513fe79d5d302b0e89bb5d549a98d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 26 Apr 2023 17:40:05 +0100 +Subject: xen/blkfront: Only check REQ_FUA for writes + +From: Ross Lagerwall + +[ Upstream commit b6ebaa8100090092aa602530d7e8316816d0c98d ] + +The existing code silently converts read operations with the +REQ_FUA bit set into write-barrier operations. This results in data +loss as the backend scribbles zeroes over the data instead of returning +it. + +While the REQ_FUA bit doesn't make sense on a read operation, at least +one well-known out-of-tree kernel module does set it and since it +results in data loss, let's be safe here and only look at REQ_FUA for +writes. + +Signed-off-by: Ross Lagerwall +Acked-by: Juergen Gross +Link: https://lore.kernel.org/r/20230426164005.2213139-1-ross.lagerwall@citrix.com +Signed-off-by: Juergen Gross +Signed-off-by: Sasha Levin +--- + drivers/block/xen-blkfront.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c +index cd58f582c50c1..b649f1a68b417 100644 +--- a/drivers/block/xen-blkfront.c ++++ b/drivers/block/xen-blkfront.c +@@ -780,7 +780,8 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri + ring_req->u.rw.handle = info->handle; + ring_req->operation = rq_data_dir(req) ? + BLKIF_OP_WRITE : BLKIF_OP_READ; +- if (req_op(req) == REQ_OP_FLUSH || req->cmd_flags & REQ_FUA) { ++ if (req_op(req) == REQ_OP_FLUSH || ++ (req_op(req) == REQ_OP_WRITE && (req->cmd_flags & REQ_FUA))) { + /* + * Ideally we can do an unordered flush-to-disk. + * In case the backend onlysupports barriers, use that. +-- +2.39.2 +