mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
char: xillybus: Avoid possible bandwidth inefficiency
The host flow controls the payload data flow from the FPGA by sending OPCODE_SET_CHECKPOINT messages. Fix the condition for sending such a message, to correctly handle the case where leap < 0. The previous expression leap > (fifo->size >> 3) was not intended to evaluate true when leap is negative. However, due to C's integer promotion rules, leap (of s32 type) is promoted to unsigned int when compared with the unsigned fifo->size >> 3 expression. As a result, negative leap values are interpreted as large positive numbers, causing the condition to evaluate true unintentionally. Consequently, the device receives correctly formed checkpoint messages that encourage it to send data, but too frequently. This may cause the device to send short data chunks, wasting USB bandwidth. Assisted-by: Deepseek:v4-pro Kimi:K2.6 ChatGPT:GPT-5.5 Claude:Sonnet-4.6 Signed-off-by: Eli Billauer <eli.billauer@gmail.com> Link: https://patch.msgid.link/20261009074557.19996-4-eli.billauer@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ca263d97a8
commit
9db7ade8f8
|
|
@ -1501,8 +1501,8 @@ static ssize_t xillyusb_read(struct file *filp, char __user *userbuf,
|
|||
*/
|
||||
|
||||
if (chan->read_data_ok &&
|
||||
(leap > (fifo->size >> 3) ||
|
||||
(checkpoint_for_complete && leap > 0))) {
|
||||
(leap > 0 && (leap > (fifo->size >> 3) ||
|
||||
checkpoint_for_complete))) {
|
||||
chan->in_current_checkpoint = checkpoint;
|
||||
rc = xillyusb_send_opcode(xdev, chan_num,
|
||||
OPCODE_SET_CHECKPOINT,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user