Merge drm/drm-next into drm-misc-next
[sfrench/cifs-2.6.git] / drivers / misc / fastrpc.c
index 6fcfb2e9f7a7b606d02e1832e7821bc3201e9218..1ad5808655254b6e495d333929acdac4e32e9fab 100644 (file)
@@ -25,7 +25,7 @@
 #define SDSP_DOMAIN_ID (2)
 #define CDSP_DOMAIN_ID (3)
 #define FASTRPC_DEV_MAX                4 /* adsp, mdsp, slpi, cdsp*/
-#define FASTRPC_MAX_SESSIONS   13 /*12 compute, 1 cpz*/
+#define FASTRPC_MAX_SESSIONS   14
 #define FASTRPC_MAX_VMIDS      16
 #define FASTRPC_ALIGN          128
 #define FASTRPC_MAX_FDLIST     16
@@ -1515,7 +1515,7 @@ static int fastrpc_get_info_from_dsp(struct fastrpc_user *fl, uint32_t *dsp_attr
        args[1].ptr = (u64)(uintptr_t)&dsp_attr_buf[1];
        args[1].length = dsp_attr_buf_len;
        args[1].fd = -1;
-       fl->pd = 1;
+       fl->pd = USER_PD;
 
        return fastrpc_internal_invoke(fl, true, FASTRPC_DSP_UTILITIES_HANDLE,
                                       FASTRPC_SCALARS(0, 1, 1), args);
@@ -1943,7 +1943,12 @@ static int fastrpc_cb_probe(struct platform_device *pdev)
        of_property_read_u32(dev->of_node, "qcom,nsessions", &sessions);
 
        spin_lock_irqsave(&cctx->lock, flags);
-       sess = &cctx->session[cctx->sesscount];
+       if (cctx->sesscount >= FASTRPC_MAX_SESSIONS) {
+               dev_err(&pdev->dev, "too many sessions\n");
+               spin_unlock_irqrestore(&cctx->lock, flags);
+               return -ENOSPC;
+       }
+       sess = &cctx->session[cctx->sesscount++];
        sess->used = false;
        sess->valid = true;
        sess->dev = dev;
@@ -1956,13 +1961,12 @@ static int fastrpc_cb_probe(struct platform_device *pdev)
                struct fastrpc_session_ctx *dup_sess;
 
                for (i = 1; i < sessions; i++) {
-                       if (cctx->sesscount++ >= FASTRPC_MAX_SESSIONS)
+                       if (cctx->sesscount >= FASTRPC_MAX_SESSIONS)
                                break;
-                       dup_sess = &cctx->session[cctx->sesscount];
+                       dup_sess = &cctx->session[cctx->sesscount++];
                        memcpy(dup_sess, sess, sizeof(*dup_sess));
                }
        }
-       cctx->sesscount++;
        spin_unlock_irqrestore(&cctx->lock, flags);
        rc = dma_set_mask(dev, DMA_BIT_MASK(32));
        if (rc) {