On Fr, 2017-04-28 at 17:35 +0800, Xiaoguang Chen wrote: > +static size_t intel_vgpu_reg_rw_gvtg(struct intel_vgpu *vgpu, char > *buf, > + size_t count, loff_t *ppos, bool iswrite) > +{ > + unsigned int i = VFIO_PCI_OFFSET_TO_INDEX(*ppos) - > + VFIO_PCI_NUM_REGIONS; > + loff_t pos = *ppos & VFIO_PCI_OFFSET_MASK; > + int fd; > + > + if (pos >= vgpu->vdev.region[i].size || iswrite) { > + gvt_vgpu_err("invalid op or offset for Intel vgpu fd > region\n"); > + return -EINVAL; > + } > + > + fd = anon_inode_getfd("gvtg", &intel_vgpu_gvtg_ops, vgpu, > + O_RDWR | O_CLOEXEC); > + if (fd < 0) { > + gvt_vgpu_err("create intel vgpu fd failed:%d\n", fd); > + return -EINVAL; > + } > + > + count = min(count, (size_t)(vgpu->vdev.region[i].size - pos)); > + memcpy(buf, &fd, count); > + > + return count; > +} Hmm, that looks like a rather strange way to return a file descriptor. What is the reason to not use ioctls on the vfio file handle, like older version of these patches did? cheers, Gerd _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx