Lines Matching refs:dmabuf
817 struct mbochs_dmabuf *dmabuf = vma->vm_private_data;
819 if (WARN_ON(vmf->pgoff >= dmabuf->pagecount))
822 vmf->page = dmabuf->pages[vmf->pgoff];
833 struct mbochs_dmabuf *dmabuf = buf->priv;
834 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
836 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
842 vma->vm_private_data = dmabuf;
846 static void mbochs_print_dmabuf(struct mbochs_dmabuf *dmabuf,
849 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
850 u32 fourcc = dmabuf->mode.drm_format;
853 prefix, dmabuf->id,
858 dmabuf->mode.width, dmabuf->mode.height, dmabuf->mode.stride,
859 dmabuf->mode.offset, dmabuf->mode.size, dmabuf->pagecount);
865 struct mbochs_dmabuf *dmabuf = at->dmabuf->priv;
866 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
869 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
874 if (sg_alloc_table_from_pages(sg, dmabuf->pages, dmabuf->pagecount,
875 0, dmabuf->mode.size, GFP_KERNEL) < 0)
894 struct mbochs_dmabuf *dmabuf = at->dmabuf->priv;
895 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
897 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
906 struct mbochs_dmabuf *dmabuf = buf->priv;
907 struct mdev_state *mdev_state = dmabuf->mdev_state;
911 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
913 for (pg = 0; pg < dmabuf->pagecount; pg++)
914 put_page(dmabuf->pages[pg]);
917 dmabuf->buf = NULL;
918 if (dmabuf->unlinked)
919 kfree(dmabuf);
933 struct mbochs_dmabuf *dmabuf;
938 dmabuf = kzalloc(sizeof(struct mbochs_dmabuf), GFP_KERNEL);
939 if (!dmabuf)
942 dmabuf->mode = *mode;
943 dmabuf->id = mdev_state->next_id++;
944 dmabuf->pagecount = DIV_ROUND_UP(mode->size, PAGE_SIZE);
945 dmabuf->pages = kcalloc(dmabuf->pagecount, sizeof(struct page *),
947 if (!dmabuf->pages)
950 page_offset = dmabuf->mode.offset >> PAGE_SHIFT;
951 for (pg = 0; pg < dmabuf->pagecount; pg++) {
952 dmabuf->pages[pg] = __mbochs_get_page(mdev_state,
954 if (!dmabuf->pages[pg])
958 dmabuf->mdev_state = mdev_state;
959 list_add(&dmabuf->next, &mdev_state->dmabufs);
961 mbochs_print_dmabuf(dmabuf, __func__);
962 return dmabuf;
966 put_page(dmabuf->pages[--pg]);
967 kfree(dmabuf->pages);
969 kfree(dmabuf);
977 struct mbochs_dmabuf *dmabuf;
981 list_for_each_entry(dmabuf, &mdev_state->dmabufs, next)
982 if (mbochs_modes_equal(&dmabuf->mode, mode))
983 return dmabuf;
991 struct mbochs_dmabuf *dmabuf;
995 list_for_each_entry(dmabuf, &mdev_state->dmabufs, next)
996 if (dmabuf->id == id)
997 return dmabuf;
1002 static int mbochs_dmabuf_export(struct mbochs_dmabuf *dmabuf)
1004 struct mdev_state *mdev_state = dmabuf->mdev_state;
1011 if (!IS_ALIGNED(dmabuf->mode.offset, PAGE_SIZE)) {
1018 exp_info.size = dmabuf->mode.size;
1019 exp_info.priv = dmabuf;
1028 dmabuf->buf = buf;
1029 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
1101 struct mbochs_dmabuf *dmabuf;
1136 dmabuf = mbochs_dmabuf_find_by_mode(mdev_state, &mode);
1137 if (!dmabuf)
1139 if (!dmabuf) {
1144 plane->drm_format = dmabuf->mode.drm_format;
1145 plane->width = dmabuf->mode.width;
1146 plane->height = dmabuf->mode.height;
1147 plane->stride = dmabuf->mode.stride;
1148 plane->size = dmabuf->mode.size;
1149 plane->dmabuf_id = dmabuf->id;
1164 struct mbochs_dmabuf *dmabuf;
1168 dmabuf = mbochs_dmabuf_find_by_id(mdev_state, id);
1169 if (!dmabuf) {
1174 if (!dmabuf->buf)
1175 mbochs_dmabuf_export(dmabuf);
1179 if (!dmabuf->buf)
1182 return dma_buf_fd(dmabuf->buf, 0);
1309 struct mbochs_dmabuf *dmabuf, *tmp;
1313 list_for_each_entry_safe(dmabuf, tmp, &mdev_state->dmabufs, next) {
1314 list_del(&dmabuf->next);
1315 if (dmabuf->buf) {
1317 dmabuf->unlinked = true;
1319 kfree(dmabuf);