Re: [RFC v2 8/8] drm: tegra: Add gr2d device
From: Dave Airlie <hidden>
Date: 2012-11-26 22:15:09
Also in:
dri-devel, lkml
static int tegra_drm_open(struct drm_device *drm, struct drm_file *filp)
{
- return 0;
+ struct tegra_drm_fpriv *fpriv;
+ int err = 0;
+
+ fpriv = kzalloc(sizeof(*fpriv), GFP_KERNEL);
+ if (!fpriv)
+ return -ENOMEM;
+
+ INIT_LIST_HEAD(&fpriv->contexts);
+ filp->driver_priv = fpriv;
+who frees this?
+struct tegra_drm_syncpt_incr_args {
+ __u32 id;
+};add 32-bits of padding here
+
+struct tegra_drm_syncpt_wait_args {
+ __u32 id;
+ __u32 thresh;
+ __s32 timeout;
+ __u32 value;
+};
+
+#define DRM_TEGRA_NO_TIMEOUT (-1)
+
+struct tegra_drm_open_channel_args {
+ __u32 class;
+ void *context;no pointers use u64, align them to 64-bits, so 32-bits of padding,
+};
+
+struct tegra_drm_get_channel_param_args {
+ void *context;
+ __u32 value;Same padding + uint64_t for void *
+};
+
+struct tegra_drm_syncpt_incr {
+ __u32 syncpt_id;
+ __u32 syncpt_incrs;
+};
+
+struct tegra_drm_cmdbuf {
+ __u32 mem;
+ __u32 offset;
+ __u32 words;
+};add padding
+
+struct tegra_drm_reloc {
+ __u32 cmdbuf_mem;
+ __u32 cmdbuf_offset;
+ __u32 target;
+ __u32 target_offset;
+ __u32 shift;
+};add padding
+
+struct tegra_drm_waitchk {
+ __u32 mem;
+ __u32 offset;
+ __u32 syncpt_id;
+ __u32 thresh;
+};
+
+struct tegra_drm_submit_args {
+ void *context;
+ __u32 num_syncpt_incrs;
+ __u32 num_cmdbufs;
+ __u32 num_relocs;
+ __u32 submit_version;
+ __u32 num_waitchks;
+ __u32 waitchk_mask;
+ __u32 timeout;
+ struct tegra_drm_syncpt_incrs *syncpt_incrs;
+ struct tegra_drm_cmdbuf *cmdbufs;
+ struct tegra_drm_reloc *relocs;
+ struct tegra_drm_waitchk *waitchks;
+
+ __u32 pad[5]; /* future expansion */
+ __u32 fence; /* Return value */
+};lose all the pointers for 64-bit aligned uint64_t. Probably should align all of these on __u64 and __u32 usage if possible. i'll look at the rest of the patches, but I need to know what commands can be submitted via this interface and what are the security implications of it. Dave.