arm: socfpga: mailbox: Fix off-by-one error on command length checking
A mailbox command contains 1-u32 header + arguments. The "len" variable only contains the length of the arguments, but not the 1-u32 header. Include the length of header when checking the ring buffer space to prevent off-by-one error. Signed-off-by: Ley Foon Tan <ley.foon.tan@intel.com> Signed-off-by: Chee Hong Ang <chee.hong.ang@intel.com>
This commit is contained in:
parent
4aab2329b2
commit
bf068c7643
@ -55,11 +55,11 @@ static __always_inline int mbox_fill_cmd_circular_buff(u32 header, u32 len,
|
|||||||
cout = MBOX_READL(MBOX_COUT) % MBOX_CMD_BUFFER_SIZE;
|
cout = MBOX_READL(MBOX_COUT) % MBOX_CMD_BUFFER_SIZE;
|
||||||
|
|
||||||
/* if command buffer is full or not enough free space
|
/* if command buffer is full or not enough free space
|
||||||
* to fit the data
|
* to fit the data. Note, len is in u32 unit.
|
||||||
*/
|
*/
|
||||||
if (((cin + 1) % MBOX_CMD_BUFFER_SIZE) == cout ||
|
if (((cin + 1) % MBOX_CMD_BUFFER_SIZE) == cout ||
|
||||||
((MBOX_CMD_BUFFER_SIZE - cin + cout - 1) %
|
((MBOX_CMD_BUFFER_SIZE - cin + cout - 1) %
|
||||||
MBOX_CMD_BUFFER_SIZE) < len)
|
MBOX_CMD_BUFFER_SIZE) < (len + 1))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* write header to circular buffer */
|
/* write header to circular buffer */
|
||||||
|
Loading…
Reference in New Issue
Block a user