* [PATCH AUTOSEL 6.19-6.6] vhost: fix caching attributes of MMIO regions by setting them explicitly
[not found] <20260215150333.2150455-1-sashal@kernel.org>
@ 2026-02-15 15:03 ` Sasha Levin
0 siblings, 0 replies; only message in thread
From: Sasha Levin @ 2026-02-15 15:03 UTC (permalink / raw)
To: patches, stable
Cc: Kommula Shiva Shankar, Jason Wang, Jason Gunthorpe,
Michael S. Tsirkin, Sasha Levin, kvm, virtualization, netdev
From: Kommula Shiva Shankar <kshankar@marvell.com>
[ Upstream commit 5145b277309f3818e2db507f525d19ac3b910922 ]
Explicitly set non-cached caching attributes for MMIO regions.
Default write-back mode can cause CPU to cache device memory,
causing invalid reads and unpredictable behavior.
Invalid read and write issues were observed on ARM64 when mapping the
notification area to userspace via mmap.
Signed-off-by: Kommula Shiva Shankar <kshankar@marvell.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Message-Id: <20260102065703.656255-1-kshankar@marvell.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
The mmap functionality has been there since `ddd89d0a059d8` which
introduced doorbell mapping. This fix would apply to all stable trees
that have this function.
### Summary
This is a textbook stable kernel fix:
1. **Obviously correct**: MMIO must be mapped non-cacheable; this is a
fundamental hardware requirement. Every other MMIO mmap in the kernel
uses `pgprot_noncached()` or similar.
2. **Fixes a real bug**: Invalid reads/writes on ARM64 — this causes
device malfunction and potential data corruption.
3. **Small and contained**: Single line addition, no side effects.
4. **No new features**: Just corrects existing mmap behavior to follow
hardware requirements.
5. **Low risk**: `pgprot_noncached()` is the standard, well-understood
kernel API for this exact purpose.
6. **High-quality review**: Three expert maintainers
reviewed/acked/committed.
7. **Self-contained**: No dependencies on other commits.
**YES**
drivers/vhost/vdpa.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
index 05a481e4c385a..b0179e8567aba 100644
--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -1527,6 +1527,7 @@ static int vhost_vdpa_mmap(struct file *file, struct vm_area_struct *vma)
if (vma->vm_end - vma->vm_start != notify.size)
return -ENOTSUPP;
+ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP);
vma->vm_ops = &vhost_vdpa_vm_ops;
return 0;
--
2.51.0
^ permalink raw reply related [flat|nested] only message in thread