diff options
| author | Carlos López <clopez@suse.de> | 2026-03-13 13:20:42 +0100 |
|---|---|---|
| committer | Sean Christopherson <seanjc@google.com> | 2026-05-13 11:12:40 -0700 |
| commit | 156615264fd3430e7f90b36f46076b2f6ec4a24a (patch) | |
| tree | e9a9bd3bc4f7466b475d039fe9fcdcabdae57516 /virt | |
| parent | 3b20a19c592d31d90594565de89f974135b22819 (diff) | |
| download | linux-next-history-156615264fd3430e7f90b36f46076b2f6ec4a24a.tar.gz | |
KVM: VFIO: update coherency only if file was deleted
When servicing a KVM_DEV_VFIO_FILE_DEL request, if a file is removed
from kv->file_list, kv->noncoherent needs to be updated, in case we
can revert to using coherent DMA. However, if we found no candidate
to remove, there is no need to re-scan the list, so do it only if a
matching file was found.
To simplify the control flow, use a mutex guard so that we can return
early from within the search loop if the maching file is found.
Signed-off-by: Carlos López <clopez@suse.de>
Reviewed-by: Alex Williamson <alex@shazbot.org>
Link: https://patch.msgid.link/20260313122040.1413091-7-clopez@suse.de
Signed-off-by: Sean Christopherson <seanjc@google.com>
Diffstat (limited to 'virt')
| -rw-r--r-- | virt/kvm/vfio.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/virt/kvm/vfio.c b/virt/kvm/vfio.c index 2fee1e82f8f68..6cdc4e9a333a3 100644 --- a/virt/kvm/vfio.c +++ b/virt/kvm/vfio.c @@ -190,27 +190,21 @@ static int kvm_vfio_file_del(struct kvm_device *dev, unsigned int fd) struct kvm_vfio *kv = dev->private; struct kvm_vfio_file *kvf; CLASS(fd, f)(fd); - int ret; if (fd_empty(f)) return -EBADF; - ret = -ENOENT; - - mutex_lock(&kv->lock); + guard(mutex)(&kv->lock); list_for_each_entry(kvf, &kv->file_list, node) { if (kvf->file == fd_file(f)) { kvm_vfio_file_free(dev, kvf); - ret = 0; - break; + kvm_vfio_update_coherency(dev); + return 0; } } - kvm_vfio_update_coherency(dev); - - mutex_unlock(&kv->lock); - return ret; + return -ENOENT; } #ifdef CONFIG_SPAPR_TCE_IOMMU |
