Patch "media: rkvdec: Add required padding" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    media: rkvdec: Add required padding

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     media-rkvdec-add-required-padding.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 115cfae5f57c7cda89f3b9737197ee28208e59f1
Author: Andrzej Pietrasiewicz <andrzej.p@xxxxxxxxxxxxx>
Date:   Thu Oct 27 10:02:17 2022 +0200

    media: rkvdec: Add required padding
    
    [ Upstream commit 00c47aa85bb26450edc6059c3d245de062e60b5d ]
    
    The addresses of two elements of the segmap[][] member are passed to the
    hardware which expects 128-bit aligned addresses. However, without this
    patch offsetof(struct rkvdec_vp9_priv_tbl, segmap[0]) is an odd number
    (2421) but the hardware just ignores the 5 least significant bits of the
    address. As a result, the hardware writes the segmentation map to incorrect
    locations.
    
    Inserting 11 bytes of padding corrects this situation by making the said
    addresses divisible by 16 (i.e. aligned on a 128-bit boundary).
    
    Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@xxxxxxxxxxxxx>
    Fixes: f25709c4ff15 ("media: rkvdec: Add the VP9 backend")
    Reviewed-by: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/staging/media/rkvdec/rkvdec-vp9.c b/drivers/staging/media/rkvdec/rkvdec-vp9.c
index d8c1c0db15c7..cfae99b40ccb 100644
--- a/drivers/staging/media/rkvdec/rkvdec-vp9.c
+++ b/drivers/staging/media/rkvdec/rkvdec-vp9.c
@@ -84,6 +84,8 @@ struct rkvdec_vp9_probs {
 		struct rkvdec_vp9_inter_frame_probs inter;
 		struct rkvdec_vp9_intra_only_frame_probs intra_only;
 	};
+	/* 128 bit alignment */
+	u8 padding1[11];
 };
 
 /* Data structure describing auxiliary buffer format. */
@@ -1006,6 +1008,7 @@ static int rkvdec_vp9_start(struct rkvdec_ctx *ctx)
 
 	ctx->priv = vp9_ctx;
 
+	BUILD_BUG_ON(sizeof(priv_tbl->probs) % 16); /* ensure probs size is 128-bit aligned */
 	priv_tbl = dma_alloc_coherent(rkvdec->dev, sizeof(*priv_tbl),
 				      &vp9_ctx->priv_tbl.dma, GFP_KERNEL);
 	if (!priv_tbl) {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux