FAILED: patch "[PATCH] hwmon: (powerz) Avoid cacheline sharing for DMA buffer" failed to apply to 6.18-stable tree
[email protected]
maintainerThe patch below does not apply to the 6.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.18.y
git checkout FETCH_HEAD
git cherry-pick -x 3023c050af3600bf451153335dea5e073c9a3088
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026050159-extinct-precision-0d22@gregkh' --subject-prefix 'PATCH 6.18.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 3023c050af3600bf451153335dea5e073c9a3088 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= <[email protected]>
Date: Wed, 8 Apr 2026 20:45:50 +0200
Subject: [PATCH] hwmon: (powerz) Avoid cacheline sharing for DMA buffer
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Depending on the architecture the transfer buffer may share a cacheline with the following mutex. As the buffer may be used for DMA, that is problematic.
Use the high-level DMA helpers to make sure that cacheline sharing can not happen.
Also drop the comment, as the helpers are documentation enough.
https://sashiko.dev/#/message/20260408175814.934BFC19421%40smtp.kernel.org
drivers/hwmon/powerz.c +4 -1
@@ -6,6 +6,7 @@#include <linux/completion.h> #include <linux/device.h> +#include <linux/dma-mapping.h> #include <linux/hwmon.h> #include <linux/module.h> #include <linux/mutex.h>
@@ -33,7 +34,9 @@ struct powerz_sensor_data { } __packed;struct powerz_priv { -char transfer_buffer[64 ];/* first member to satisfy DMA alignment */ + __dma_from_device_group_begin(); +char transfer_buffer[64 ]; + __dma_from_device_group_end();struct mutex mutex;struct completion completion;struct urb *urb;
Sasha Levin
maintainerPATCH 1/2 dma-mapping: add __dma_from_device_group_begin()/end()
From: "Michael S. Tsirkin" <[email protected]>
[ Upstream commit ca085faabb42c31ee204235facc5a430cb9e78a9 ]
When a structure contains a buffer that DMA writes to alongside fields that the CPU writes to, cache line sharing between the DMA buffer and CPU-written fields can cause data corruption on non-cache-coherent platforms.
Add __dma_from_device_group_begin()/end() annotations to ensure proper alignment to prevent this:
struct my_device {
spinlock_t lock1;
__dma_from_device_group_begin();
char dma_buffer1[16];
char dma_buffer2[16];
__dma_from_device_group_end();
spinlock_t lock2;
};Message-ID: <19163086d5e4704c316f18f6da06bc1c72968904.1767601130.git.mst@redhat.com>
Stable-dep-of: 3023c050af36 ("hwmon: (powerz) Avoid cacheline sharing for DMA buffer")
--- include/linux/dma-mapping.h | 13 +++++++++++++ 1 file changed, 13 insertions(+)
include/linux/dma-mapping.h +13 -0
@@ -7,6 +7,7 @@#include <linux/dma-direction.h> #include <linux/scatterlist.h> #include <linux/bug.h> +#include <linux/cache.h> /** * List of possible attributes associated with a DMA mapping. The semantics
@@ -710,6 +711,18 @@ static inline int dma_get_cache_alignment(void) }#endif +#ifdef ARCH_HAS_DMA_MINALIGN +#define ____dma_from_device_aligned __aligned(ARCH_DMA_MINALIGN) +#else +#define ____dma_from_device_aligned +#endif +/* Mark start of DMA buffer */ +#define __dma_from_device_group_begin (GROUP ) \ + __cacheline_group_begin(GROUP) ____dma_from_device_aligned +/* Mark end of DMA buffer */ +#define __dma_from_device_group_end (GROUP ) \ + __cacheline_group_end(GROUP) ____dma_from_device_aligned +static inline void *dmam_alloc_coherent (struct device *dev,size_t size,dma_addr_t *dma_handle,gfp_t gfp) {
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 hwmon: (powerz) Avoid cacheline sharing for DMA buffer
From: Thomas Weißschuh <[email protected]>
[ Upstream commit 3023c050af3600bf451153335dea5e073c9a3088 ]
Depending on the architecture the transfer buffer may share a cacheline with the following mutex. As the buffer may be used for DMA, that is problematic.
Use the high-level DMA helpers to make sure that cacheline sharing can not happen.
Also drop the comment, as the helpers are documentation enough.
https://sashiko.dev/#/message/20260408175814.934BFC19421%40smtp.kernel.org
--- drivers/hwmon/powerz.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/hwmon/powerz.c +4 -1
@@ -6,6 +6,7 @@#include <linux/completion.h> #include <linux/device.h> +#include <linux/dma-mapping.h> #include <linux/hwmon.h> #include <linux/module.h> #include <linux/mutex.h>
@@ -33,7 +34,9 @@ struct powerz_sensor_data { } __packed;struct powerz_priv { -char transfer_buffer[64 ];/* first member to satisfy DMA alignment */ + __dma_from_device_group_begin(); +char transfer_buffer[64 ]; + __dma_from_device_group_end();struct mutex mutex;struct completion completion;struct urb *urb;
Signature · 1 line
2.53.0