On Mon, Mar 02, 2026 at 02:17:46PM +0800, Jian Zhang wrote:
> A valid IPMI over SSIF response must contain at least three bytes
> (NetFn/LUN, Command and Completion Code).
> 
> Some DMA-only I2C controllers may return short reads instead of a
> proper NACK when the response is not ready. Treat such short reads
> as incomplete and retry until a full response is received.

Well that's unfriendly of them.

Anyway, I see the issue.  I would ask a couple of things:

Can you add a comment before this "if" statement so people in the future
know why it's this way?  Otherwise it's a bit mysterious.

Wouldn't the i2c_smbus_read_block_data() in ipmi_ssif_thread() have the
same issue?  We should fix all of these if so.

Thanks,

-corey

> 
> Signed-off-by: Jian Zhang <[email protected]>
> ---
>  drivers/char/ipmi/ipmi_ssif.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
> index 37a5cb5c53f1..64ee939a7a4b 100644
> --- a/drivers/char/ipmi/ipmi_ssif.c
> +++ b/drivers/char/ipmi/ipmi_ssif.c
> @@ -1300,7 +1300,7 @@ static int read_response(struct i2c_client *client, 
> unsigned char *resp)
>       while (retry_cnt > 0) {
>               ret = i2c_smbus_read_block_data(client, SSIF_IPMI_RESPONSE,
>                                               resp);
> -             if (ret > 0)
> +             if (ret >= 3)
>                       break;
>               msleep(SSIF_MSG_MSEC);
>               retry_cnt--;
> -- 
> 2.20.1


_______________________________________________
Openipmi-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openipmi-developer

Reply via email to