summaryrefslogtreecommitdiffstats
path: root/samples/vfio-mdev
diff options
context:
space:
mode:
authorAlex Williamson <alex.williamson@redhat.com>2018-05-11 09:05:02 -0600
committerAlex Williamson <alex.williamson@redhat.com>2018-06-08 10:21:39 -0600
commit48d8476b41eed63567dd2f0ad125c895b9ac648a (patch)
tree02a6fd308233b40ba26b05234c7e05dcd847d961 /samples/vfio-mdev
parent29dcea88779c856c7dc92040a0c01233263101d4 (diff)
downloadlinux-48d8476b41eed63567dd2f0ad125c895b9ac648a.tar.gz
linux-48d8476b41eed63567dd2f0ad125c895b9ac648a.tar.bz2
linux-48d8476b41eed63567dd2f0ad125c895b9ac648a.zip
vfio/type1: Fix task tracking for QEMU vCPU hotplug
MAP_DMA ioctls might be called from various threads within a process, for example when using QEMU, the vCPU threads are often generating these calls and we therefore take a reference to that vCPU task. However, QEMU also supports vCPU hotplug on some machines and the task that called MAP_DMA may have exited by the time UNMAP_DMA is called, resulting in the mm_struct pointer being NULL and thus a failure to match against the existing mapping. To resolve this, we instead take a reference to the thread group_leader, which has the same mm_struct and resource limits, but is less likely exit, at least in the QEMU case. A difficulty here is guaranteeing that the capabilities of the group_leader match that of the calling thread, which we resolve by tracking CAP_IPC_LOCK at the time of calling rather than at an indeterminate time in the future. Potentially this also results in better efficiency as this is now recorded once per MAP_DMA ioctl. Reported-by: Xu Yandong <xuyandong2@huawei.com> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'samples/vfio-mdev')
0 files changed, 0 insertions, 0 deletions