diff options
author | Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> | 2019-02-14 15:23:20 +0100 |
---|---|---|
committer | Juergen Gross <jgross@suse.com> | 2019-02-18 06:50:03 +0100 |
commit | fa13e665e02874c0a5f4d06d6967ae34a6cb3d6a (patch) | |
tree | ebecfe859585e02ea8a0d14b605628411ccf893f /drivers/xen/gntdev-dmabuf.h | |
parent | xen/pciback: Don't disable PCI_COMMAND on PCI device reset. (diff) | |
download | linux-fa13e665e02874c0a5f4d06d6967ae34a6cb3d6a.tar.xz linux-fa13e665e02874c0a5f4d06d6967ae34a6cb3d6a.zip |
xen/gntdev: Do not destroy context while dma-bufs are in use
If there are exported DMA buffers which are still in use and
grant device is closed by either normal user-space close or by
a signal this leads to the grant device context to be destroyed,
thus making it not possible to correctly destroy those exported
buffers when they are returned back to gntdev and makes the module
crash:
[ 339.617540] [<ffff00000854c0d8>] dmabuf_exp_ops_release+0x40/0xa8
[ 339.617560] [<ffff00000867a6e8>] dma_buf_release+0x60/0x190
[ 339.617577] [<ffff0000082211f0>] __fput+0x88/0x1d0
[ 339.617589] [<ffff000008221394>] ____fput+0xc/0x18
[ 339.617607] [<ffff0000080ed4e4>] task_work_run+0x9c/0xc0
[ 339.617622] [<ffff000008089714>] do_notify_resume+0xfc/0x108
Fix this by referencing gntdev on each DMA buffer export and
unreferencing on buffer release.
Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Reviewed-by: Boris Ostrovsky@oracle.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Diffstat (limited to 'drivers/xen/gntdev-dmabuf.h')
-rw-r--r-- | drivers/xen/gntdev-dmabuf.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/xen/gntdev-dmabuf.h b/drivers/xen/gntdev-dmabuf.h index 7220a53d0fc5..3d9b9cf9d5a1 100644 --- a/drivers/xen/gntdev-dmabuf.h +++ b/drivers/xen/gntdev-dmabuf.h @@ -14,7 +14,7 @@ struct gntdev_dmabuf_priv; struct gntdev_priv; -struct gntdev_dmabuf_priv *gntdev_dmabuf_init(void); +struct gntdev_dmabuf_priv *gntdev_dmabuf_init(struct file *filp); void gntdev_dmabuf_fini(struct gntdev_dmabuf_priv *priv); |