mirror of
https://github.com/torvalds/linux.git
synced 2026-09-14 16:10:02 +02:00
FOLL_LONGTERM pinning fails for some memory types, such as file-backed
guest memory. As a result, kvm_s390_adapter_map() returns -EINVAL and
irqfd adapter registration fails even though interrupt delivery could
still work via the existing non-atomic path.
When FOLL_LONGTERM pinning fails, verify that the page is accessible
using a short-term pin instead. If the short-term pin succeeds, unpin
the page and add a map entry with pinned=false to preserve MAP/UNMAP
symmetry. The non-atomic irqfd path already performs short-term pinning
for interrupt delivery, so this restores the previous behavior for
memory that cannot be pinned long-term.
get_map_info() is updated to return NULL for unpinned entries so that
the atomic irqfd fast path falls back to the non-atomic path.
kvm_s390_adapter_unmap() and kvm_s390_unmap_all_adapters() skip dirty
marking and unpin for unpinned entries.
Update Documentation/virt/kvm/devices/s390_flic.rst to reflect the
new MAP/UNMAP behavior.
Fixes:
|
||
|---|---|---|
| .. | ||
| dat.c | ||
| dat.h | ||
| diag.c | ||
| faultin.c | ||
| faultin.h | ||
| gaccess.c | ||
| gaccess.h | ||
| gmap.c | ||
| gmap.h | ||
| guestdbg.c | ||
| intercept.c | ||
| interrupt.c | ||
| Kconfig | ||
| kvm-s390.c | ||
| kvm-s390.h | ||
| Makefile | ||
| pci.c | ||
| pci.h | ||
| priv.c | ||
| pv.c | ||
| sigp.c | ||
| trace-s390.h | ||
| trace.h | ||
| vsie.c | ||