Jason Wang
2023-Feb-14 06:16 UTC
[PATCH] vhost-vdpa: cleanup memory maps when closing vdpa fds
? 2023/1/31 22:53, Longpeng(Mike) ??:> From: Longpeng <longpeng2 at huawei.com> > > We must cleanup all memory maps when closing the vdpa fds, otherwise > some critical resources (e.g. memory, iommu map) will leaked if the > userspace exits unexpectedly (e.g. kill -9).Sounds like a bug of the kernel, should we fix there? Thanks> > Signed-off-by: Longpeng <longpeng2 at huawei.com> > --- > drivers/vhost/vdpa.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c > index a527eeeac637..37477cffa5aa 100644 > --- a/drivers/vhost/vdpa.c > +++ b/drivers/vhost/vdpa.c > @@ -823,6 +823,18 @@ static void vhost_vdpa_unmap(struct vhost_vdpa *v, > vhost_vdpa_remove_as(v, asid); > } > > +static void vhost_vdpa_clean_map(struct vhost_vdpa *v) > +{ > + struct vhost_vdpa_as *as; > + u32 asid; > + > + for (asid = 0; asid < v->vdpa->nas; asid++) { > + as = asid_to_as(v, asid); > + if (as) > + vhost_vdpa_unmap(v, &as->iotlb, 0ULL, 0ULL - 1); > + } > +} > + > static int vhost_vdpa_va_map(struct vhost_vdpa *v, > struct vhost_iotlb *iotlb, > u64 iova, u64 size, u64 uaddr, u32 perm) > @@ -1247,6 +1259,7 @@ static int vhost_vdpa_release(struct inode *inode, struct file *filep) > vhost_vdpa_clean_irq(v); > vhost_vdpa_reset(v); > vhost_dev_stop(&v->vdev); > + vhost_vdpa_clean_map(v); > vhost_vdpa_free_domain(v); > vhost_vdpa_config_put(v); > vhost_vdpa_cleanup(v);