[media] solo6x10: check dma_map_sg() return value
authorHans Verkuil <hans.verkuil@cisco.com>
Sat, 15 Feb 2014 12:15:53 +0000 (09:15 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Thu, 17 Jul 2014 14:57:32 +0000 (11:57 -0300)
The dma_map_sg() function can fail, so check for the return value.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c

index 6078aeb4ce07f4a27623a4943517bb29e056e7e6..968666a544dcdb25281bfd8eb29ab59175b966b8 100644 (file)
@@ -478,8 +478,9 @@ static int solo_fill_jpeg(struct solo_enc_dev *solo_enc,
        vb2_set_plane_payload(vb, 0, vop_jpeg_size(vh) + solo_enc->jpeg_len);
 
        /* may discard all previous data in vbuf->sgl */
-       dma_map_sg(&solo_dev->pdev->dev, vbuf->sgl, vbuf->nents,
-                       DMA_FROM_DEVICE);
+       if (!dma_map_sg(&solo_dev->pdev->dev, vbuf->sgl, vbuf->nents,
+                       DMA_FROM_DEVICE))
+               return -ENOMEM;
        ret = solo_send_desc(solo_enc, solo_enc->jpeg_len, vbuf,
                             vop_jpeg_offset(vh) - SOLO_JPEG_EXT_ADDR(solo_dev),
                             frame_size, SOLO_JPEG_EXT_ADDR(solo_dev),
@@ -525,8 +526,9 @@ static int solo_fill_mpeg(struct solo_enc_dev *solo_enc,
        frame_size = ALIGN(vop_mpeg_size(vh) + skip, DMA_ALIGN);
 
        /* may discard all previous data in vbuf->sgl */
-       dma_map_sg(&solo_dev->pdev->dev, vbuf->sgl, vbuf->nents,
-                       DMA_FROM_DEVICE);
+       if (!dma_map_sg(&solo_dev->pdev->dev, vbuf->sgl, vbuf->nents,
+                       DMA_FROM_DEVICE))
+               return -ENOMEM;
        ret = solo_send_desc(solo_enc, skip, vbuf, frame_off, frame_size,
                        SOLO_MP4E_EXT_ADDR(solo_dev),
                        SOLO_MP4E_EXT_SIZE(solo_dev));